Recentemente ho aggiornato a Windows 10 - e ora vedo alcune modifiche piuttosto inaspettate nell'output di una data quando si utilizza l'identificatore di formato "tt".Output of times (AM/PM) modificato in Windows 10 quando si utilizza DateTime.ToString ("tt")
Ecco alcuni codice che illustra il problema:
using System.IO;
using System;
using System.Globalization;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var cultures = new string[] {null, "en-NZ", "en-US", "en-AU", "en-GB"};
foreach (var culture in cultures) {
if (culture != null) {
var c = CultureInfo.GetCultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture = c;
}
DateTime dt = new DateTime(2015, 1, 2, 3, 4, 5, DateTimeKind.Utc);
Console.WriteLine("selection: {0} CurrentThread.CurrentCulture.Name: {1} CurrentThread.CurrentUICulture.Name: {2} Value: {3}",
culture ?? "ambient",
System.Threading.Thread.CurrentThread.CurrentCulture.Name,
System.Threading.Thread.CurrentThread.CurrentUICulture.Name,
dt.ToString("hhh:mm tt"));
}
}
}
L'uscita nelle versioni precedenti di Windows è stato:
selection: ambient CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ Value: 03:04 a.m.
selection: en-NZ CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ Value: 03:04 a.m.
selection: en-US CurrentThread.CurrentCulture.Name: en-US CurrentThread.CurrentUICulture.Name: en-US Value: 03:04 AM
selection: en-AU CurrentThread.CurrentCulture.Name: en-AU CurrentThread.CurrentUICulture.Name: en-AU Value: 03:04 AM
selection: en-GB CurrentThread.CurrentCulture.Name: en-GB CurrentThread.CurrentUICulture.Name: en-GB Value: 03:04 am
e in Windows 10:
selection: ambient (windows 10) CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-US Value: 03:04 a.m.
selection: en-NZ CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ Value: 03:04 AM
selection: en-US CurrentThread.CurrentCulture.Name: en-US CurrentThread.CurrentUICulture.Name: en-US Value: 03:04 AM
selection: en-AU CurrentThread.CurrentCulture.Name: en-AU CurrentThread.CurrentUICulture.Name: en-AU Value: 03:04 AM
selection: en-GB CurrentThread.CurrentCulture.Name: en-GB CurrentThread.CurrentUICulture.Name: en-GB Value: 03:04 AM
In entrambi i casi questo codice è stato compilato per il targeting di Visual Studio 2013.Net Framework 4.5
Qualcuno sa perché il comportamento è cambiato - e perché in Windows 10 sembra che l'impostazione di qualsiasi cultura su un thread modifichi specificamente l'output di AM/PM per essere formattato come "AM"/"PM" non quello che viene normalmente emesso per quella cultura?
Il tuo codice funziona correttamente sulla mia macchina Windows10/VS2015/4.5. – vendettamit
Hai installato i file di lingua di Windows 10 per tutte le culture che usi qui? –
Ho tutte le funzionalità linguistiche opzionali installate per en-GB e en-US ... en-AU e en-NZ sono appena fuori dalla scatola (ma li ho configurati come lingue con cui posso leggere e scrivere Windows 10). Questa è sicuramente una regressione nel comportamento che penso - anche se ho capito bene, i dati di CultureInfo sono stati caricati da chiamate interne di Windows, ma provenivano da dati sempre disponibili in windows, ad es.le stesse informazioni che popolano la finestra di dialogo delle impostazioni di data e ora quando passi da un paese all'altro. – Bittercoder