Это потому, что проблема с культурным форматом?
Да. Ваш пользователь должен принадлежать к культуре, где разделителем времени является точка. И «:», и «/» интерпретируются с учетом языка и региональных параметров в настраиваемых форматах даты и времени .
Как я могу убедиться, что строка результата разделена двоеточием вместо точки?
Предлагаю уточнить 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 июля в зависимости от культуры читателя.)