.NET (3.5) formatta i tempi utilizzando punti anziché i due punti come separatore di tempo per la cultura IT-IT?

Secondo Wikipedia (e confermata in risposta da Dario Solera ), in Italia si calcolano i tempi usando i due punti:

La notazione a 24 ore viene utilizzata per scrivere con i due punti come separatore. Esempio: 14:05. I minuti sono scritti con due cifre; i numeri delle ore possono essere scritti con o senza zero iniziale.

Tuttavia, l’esecuzione del seguente codice sembra produrre punti:

using System.Globalization; Thread.CurrentThread.CurrentCulture = new CultureInfo("it-IT"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT"); // Outputs "11.08" Console.WriteLine(DateTime.Now.ToShortTimeString()); // Outputs "." Console.WriteLine(new CultureInfo("it-IT").DateTimeFormat.TimeSeparator); 

Si tratta di un bug di framework? Qual è il modo migliore per “aggiustarlo”? TimeSeparator è impostabile – dovremmo semplicemente sovrascriverlo prima di assegnarlo a Thread.CurrentThread.CurrentCulture ecc.?

Questo sembra essere un problema di .NET 3.5. In .NET 4.0 il codice che hai pubblicato utilizza i due punti come previsto. Sembra uno strano cambiamento di rottura tra le versioni del framework, ma sembra che l’aggiornamento a .NET 4 risolverà il problema.

Posso garantire in Italia che utilizziamo i due punti per separare le cifre dell’ora e dei minuti e usiamo il formato di 24 ore. Wikipedia è corretta (almeno questa volta).

È probabile che il tuo problema non sia l’impostazione della cultura dell’interfaccia utente del thread. Qualcosa di simile dovrebbe funzionare:

 Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("it-IT"); 

Il separatore delle ore / minuti ( TimeSeparator ) in Italia sembra essere un . , non a :

Si sta formattando in modo specifico per la cultura italiana, quindi ne consegue che questo è ciò che verrà utilizzato.

In una stringa di formato DateTime , il : è un segnaposto per questo separatore, se la cultura definisce . o , o qualsiasi altra cosa come separatore, è ciò che verrà sostituito quando si formatta il DateTime con quella cultura.

A seguito della conversazione sotto la risposta di Oded , questo è probabilmente quello che dovresti usare:

 var culture = CultureInfo.GetCultureInfo("it-IT"); var stringValue = new TimeSpan(100, 100, 100, 100, 100).ToString(null, culture); var timespan = TimeSpan.Parse(stringValue, culture); // Another example var culture = CultureInfo.GetCultureInfo("it-IT"); var stringValue = DateTime.Now.ToString(null, culture); var dateTime = DateTime.Parse(stringValue, culture);