2017-02-23 4 views
2

Nach MSDN erhält die statische Eigenschaft DateTimeFormatInfo.InvariantInfo "das standardmäßige schreibgeschützte DateTimeFormatInfo-Objekt, das kulturunabhängig (invariant) ist".DateTimeFormatInfo.InvariantInfo inkonsistente Datumsmuster?

Das lange Datumsmuster ist jedoch "dddd, dd MMMM yyyy" und gibt ein Format wie Montag, 29. Februar 2016. Dieses Format wird häufig auf dem Kontinent in Westeuropa verwendet.

Das kurze Datumsmuster ist jedoch "MM/TT/JJJJ", was zu einem Format 29.02.2016 führt. Dieses Format wird häufig in den USA verwendet.

Noch schlimmer, wenn Sie versuchen, in sortierbares Format "s" zu konvertieren, wird dieser FormatProvider in 29/2/2016 00:00:00 ergeben, die kaum sortierbar ist.

Ist dieses inkonsistente Verhalten ein Fehler oder ist es ein Kompromiss zu "kulturunabhängig"?

+0

Ich glaube en-US kurzes Datum ist einzelne Monatsziffer, nicht Null gepolstert. Das ändert jedoch nichts an der Frage. –

+0

Von dem, was ich im [Quellcode] (https://referencesource.microsoft.com/#mscorlib/system/globalization/calendardata.cs.045e92053a4b3c84) sehen kann, ist es alles nur hart-codiert ohne viele Kommentare zu erklären, warum, andere als vielleicht '// Setze unsere Standard/Gregorianischen US-Kalenderdaten. Das Problem besteht also möglicherweise nicht darin, dass es inkonsistent ist, vielleicht ist es das, aber Sie müssen die Definition für erwartete Formate finden. –

Antwort

0

Scheint Standardverhalten für mich. DateTimeFormatInfo.InvariantInfo bedeutet weder eine neutrale noch eine spezifische Kultur, sondern generiert ein Format, das in ein beliebiges kulturspezifisches Format konvertiert werden kann. Wie Sie in source code sehen können, ist es Englisch basiert aber nicht kulturspezifisch (en aber nicht en-US). Ihre Beobachtung:

Die kurze Datum Muster jedoch ist „MM/tt /“, die 2016.02.29 in ein Format führt. Dieses Format wird häufig in den USA verwendet.

Ist nicht korrekt, weil En-US-Kultur ToString ("d") geben 29.02.2016 (keine führenden). Auch die Zeit ist in AM oder PM.