Це тому, що проблема із форматом культури?
Так. Ваш користувач повинен бути в культурі, де роздільник часу є крапкою. Обидва ":" та "/" інтерпретуються залежно від культури у спеціальних форматах дати та часу .
Як я можу переконатися, що результат рядка розміщений двокрапкою, а не крапкою?
Я б запропонував вказати CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Крім того, ви можете просто вказати роздільники часу та дати:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... але це дасть вам "цікаві" результати, яких ви, напевно, не очікуєте, якщо користувачі запускають культуру, де система календарів за замовчуванням не є григоріанським календарем. Наприклад, візьміть такий код:
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"));
}
}
Це дає виробництво (18 вересня 2013 року):
11/12/1434 15:04:31.750
Я здогадуюсь, що ваша веб-служба була б здивована цим!
Я б фактично запропонував не тільки використовувати інваріантну культуру, але і змінити формат дати ISO-8601:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Це більш загальновизнаний формат - він також сортується і робить порядок місяця та дня очевидними. (Тоді як 06.07.2013 можна інтерпретувати як 7 або 6 липня залежно від культури читача.)