2009-06-10 2 views
0

In einer ASP.NET-Anwendung setze ich die Kultur zu LV-LV. Alles ist in Ordnung, aber das voreingestellte kurze Datumsformat scheint "yyyy.mm.dd" zu sein. Der Kunde möchte, dass es "dd.mm.yyyy" ist (was eigentlich der LV-Standard ist). Woher erhält ASP.NET die Datums-/Uhrzeiteinstellungen für eine bestimmte Kultur? Wie können sie für eine einzelne Kultur verändert werden, ohne andere Kulturen zu beeinflussen (die Anwendung soll lokalisierbar sein)?Woher erhält ASP.NET seine Kultureinstellungen?

Antwort

3

Ich hatte mal ein ähnliches Problem und löste es mit:

DateTimeFormatInfo dtfi = (DateTimeFormatInfo)Thread.CurrentThread.CurrentCulture.DateTimeFormat.Clone(); 
dtfi.ShortDatePattern = "dd.MM.yyyy"; 
dtfi.DateSeparator = "."; 
Thread.CurrentThread.CurrentCulture.DateTimeFormat = dtfi ; 
Thread.CurrentThread.CurrentUICulture.DateTimeFormat = dtfi; 

diese Weise können Sie jede andere regionale Einstellung außer das Datumsformat zu halten bekommen.

Dieser Code lief tatsächlich auf OnLoad in unserer Basisklasse. Ich bin mir nicht sicher, ob das der beste Weg ist.

+0

So etwas ist mir auch in den Sinn gekommen. Trotzdem scheint es irgendwie ... falsch zu sein. : D Ich mag keine Hardcoding. Vielleicht gibt es einige Systemregistrierungsschlüssel, die für diese Kultur geändert werden müssen? –

+0

Das Problem damit ist, wenn einige Ihrer Benutzer das ISO-Standard-Datumsformat bevorzugen. –

0

.Net ruft die Datums-/Uhrzeiteinstellungen für eine bestimmte Kultur aus der DateTimeFormatInfo-Klasse ab. Sie können die DateTimeFormat-Eigenschaft einer CultureInfo mit einer DateTimeFormatInfo festlegen, die Sie geändert haben. Wenn diese Kultur die aktuelle Kultur ist, können Sie sie auf der CurrentCulture festlegen. In beiden Fällen wirkt sich dies nur auf die von Ihnen erstellte CultureInfo aus und wirkt sich nicht auf andere Kulturen aus. (Jeder Aufruf von CultureInfo.GetCultureInfo ("lv-LV") wird diese Änderungen nicht übernehmen, da es sich um eine schreibgeschützte Kopie handelt.) Sie müssen CultureInfo nicht unbedingt an eine DateTime-Formatierungsmethode übergeben (ToString, ParseExact)) - Sie können das explizite Muster oder die DateTimeFormatInfo übergeben.

CultureInfo lvLV = new CultureInfo("lv-LV"); 

DateTimeFormatInfo lvLVdtfi = (DateTimeFormatInfo) lvLV.DateTimeFormat.Clone(); 
lvLVdtfi.ShortDatePattern = "dd.MM.yyyy"; 
lvLV.DateTimeFormat = lvLVdtfi; 

DateTime.Now.ToString("d", lvLV);  // short date pattern from modified lv-LV CultureInfo 
DateTime.Now.ToString("d", lvLVdtfi); // short date pattern from modified DateTimeFormatInfo 
DateTime.Now.ToString("dd.MM.yyyy"); // explicit short date pattern 

Wenn lv-LV die aktuelle Windows-Kultur ist, dann können Sie eine Benutzerumgehung gesetzt (Verwendung intl.cpl die Regions- und Sprachoptionen Bedienfeld und das Format anpassen) und der Rahmen wird diese abholen.

Verwandte Themen