È perché qualche problema di formato culturale?
Sì. L'utente deve trovarsi in una cultura in cui il separatore temporale è un punto. Sia ":" che "/" sono interpretati in modo sensibile alla cultura in formati personalizzati di data e ora .
Come posso assicurarmi che la stringa del risultato sia delimitata dai due punti anziché dal punto?
Suggerirei di specificare CultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
In alternativa, si può semplicemente citare ora e data separatori:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... ma questo ti darà risultati "interessanti" che probabilmente non ti aspetti se riesci a far funzionare gli utenti in una cultura in cui il sistema di calendario predefinito non è il calendario gregoriano. Ad esempio, prendi il seguente codice:
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"));
}
}
Che produce output (il 18 settembre 2013) di:
11/12/1434 15:04:31.750
Suppongo che il tuo servizio web ne sarebbe sorpreso!
In realtà suggerirei non solo di utilizzare la cultura invariante, ma anche di passare a un formato data ISO-8601:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Questo è un formato più accettato a livello globale - è anche ordinabile e rende evidente l'ordine del mese e del giorno. (Considerando che il 06/07/2013 potrebbe essere interpretato come il 7 giugno o il 6 luglio a seconda della cultura del lettore.)