2016-05-20 18 views
1

Letzte Nacht wanderten wir unsere Web-Services-Tier von physischen Windows 2008 R2 auf virtuellen Windows-2012DateTimeFormat.AbbreviatedMonthNames Name einen Punkt am Ende des Monats das Hinzufügen

Wir Tonnen Ereignisse auf unsere Protokolle über Datetime die ungültige Formate bekommen , seltsam, als wir unsere regionalen Einstellungen überprüft haben.

Lange Rede kurzer Sinn:

CultureInfo.GetCultureInfo("es-MX").DateTimeFormat.AbbreviatedMonthNames 

Ausgänge (mit LinqPad5):

  1. ene.
  2. Feb.
  3. mar.

auf unserer neuen 2012 env während auf 2008 ouptus:

  1. ene
  2. FEBRUAR
  3. mar

Unsere Analyse ist so etwas wie folgt aus:

DateTime.Parse("18 ene 16",CultureInfo.GetCultureInfo("es-MX")) 

Und während es Wunder gewirkt hat, wirft es jetzt

FormatException : The string was not recognized as a valid DateTime. There is an unknown word starting at index 3..

Während

DateTime.Parse("18 ene. 16",CultureInfo.GetCultureInfo("es-MX")) 

funktioniert, ist aber nicht die erwartete Eingabe von unseren einigen Kunden.

Arbeiten mit der gleichen Laufzeitversion (4.0.30319.42000), doppelt überprüft (wieder) unsere regionalen Einstellungen auf beiden Servern, was kann ich noch suchen, um dies zu beheben (vor aufgeben und hacken es mit einem Regex ersetzen)?

Danke.

+0

Jemand hat wahrscheinlich die Konfiguration im alten Server vor vielen Jahren geändert. Sie müssen es erneut auf dem neuen tun. Verwenden Sie die Systemsteuerung> Region. –

+0

Sind Sie sich über die Laufzeitversion sicher? 2008 R2 wurde mit 3.5.1 framework ausgeliefert, das den abbr. Namen ohne Punkt, während 2012 mit 4.5 Framework geliefert wird, das die Abkürzung ausgibt. Namen mit einem Punkt. Sie könnten versuchen, die Framework-Version (wenn möglich) auf 3.5 zu ändern? – Uwe

+0

@HansPassant: Ja, wir überprüfen beide Konfigurationen erneut, ich werde Sie wissen lassen, ob ich etwas finde. – DSXP

Antwort

1

Leider konnte ich nichts in der Konfiguration finden, die mich in die richtige Richtung wies.

mit einem fiesen Hack so enden:

var cultura = CultureInfo.CreateSpecificCulture("es-MX"); 
if (cultura.DateTimeFormat.AbbreviatedMonthNames.First().EndsWith(".")) 
    cultura.DateTimeFormat.AbbreviatedMonthNames = cultura.DateTimeFormat.AbbreviatedMonthNames.Select(c => c.Substring(0, c.Length > 1 ? c.Length - 1 : 0)).ToArray(); 

und verwendet diese Kultur in der Analyse.