¿Es por algún problema de formato cultural?
Si. Su usuario debe estar en una cultura donde el separador de tiempo es un punto. Tanto ":" como "/" se interpretan de manera sensible a la cultura en formatos de fecha y hora personalizados .
¿Cómo puedo asegurarme de que la cadena de resultados está delimitada por dos puntos en lugar de punto?
Sugeriría especificar CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Alternativamente, puede citar los separadores de hora y fecha:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... pero eso le dará resultados "interesantes" que probablemente no espere si consigue que los usuarios se ejecuten en una cultura donde el sistema de calendario predeterminado no es el calendario gregoriano. Por ejemplo, tome el siguiente código:
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"));
}
}
Eso produce una producción (el 18 de septiembre de 2013) de:
11/12/1434 15:04:31.750
¡Supongo que su servicio web se sorprendería de eso!
De hecho, sugeriría no solo usar la cultura invariante, sino también cambiar a un formato de fecha ISO-8601:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Este es un formato más aceptado a nivel mundial: también se puede ordenar y hace que el orden de mes y día sea obvio. (Mientras que el 07/06/2013 podría interpretarse como el 7 de junio o el 6 de julio, dependiendo de la cultura del lector).