Apakah karena beberapa masalah format budaya?
Iya. Pengguna Anda harus dalam budaya di mana pemisah waktu adalah titik. Baik ":" dan "/" ditafsirkan dalam cara yang peka budaya dalam format tanggal dan waktu khusus .
Bagaimana saya bisa memastikan string hasil dibatasi oleh titik dua bukan titik?
Saya sarankan menentukan CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Atau, Anda bisa mengutip pemisah waktu dan tanggal:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... tapi itu akan memberi Anda hasil "menarik" yang mungkin tidak Anda harapkan jika Anda membuat pengguna menjalankan budaya di mana sistem kalender default bukan kalender Gregorian. Misalnya, ambil kode berikut:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
Itu menghasilkan output (pada 18 September 2013) dari:
11/12/1434 15:04:31.750
Dugaan saya adalah bahwa layanan web Anda akan terkejut dengan itu!
Saya sebenarnya menyarankan tidak hanya menggunakan budaya invarian, tetapi juga mengubah ke format tanggal ISO-8601:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Ini adalah format yang lebih diterima secara global - format ini juga dapat disortir, dan membuat urutan bulan dan hari menjadi jelas. (Bahwa 06/07/2013 dapat diartikan sebagai 7 Juni atau 6 Juli tergantung pada budaya pembaca.)