2016-05-17 9 views
2

Arbeit in Australien und wurden von US empfangene Nachricht, dass DateTime String "Dec15" falsch ist das Parsen und Zurückkehren 15. Dezember 2016 statt 1. Dezember 2015. "Dec15" in den folgenden Schnipsel sind Variablen im wirklichen Leben.C# DateTime.Parse ignoriert Culture

var date = DateTime.Parse("Dec15", new CultureInfo("en-AU")); //returns December 1 2015 

Ich kann nicht replizieren, auch nach meinem PC Format & Lage Wechsel zu US-zu-Punkt.

Allerdings kann ich replizieren, wenn ich den Code ändern, um eine US-Kultur zu verwenden.

var date = DateTime.Parse("Dec15", new CultureInfo("en-US")); //returns December 15 2016 

Ich bin mir nicht bewusst, dass der Code ein Problem in der Vergangenheit war. Ich möchte etwas Hilfe verstehen, warum die CultureInfo wird ignoriert/ersetzt mit, was scheint, dort Standardkulturen drüben in den USA zu sein.

Schätzen Sie Ihre Vorschläge.

+1

ich in Australien bin, und 'DateTime.Parse („Dec15“)' in der Tat kehrt die erste von Dezember 2015, und nicht 15. Dezember, so denke ich, dass die Tatsache, dass sie in Australien sind, ein Red Hering ist, und es ist ein anderes Problem im Spiel – Rob

+1

Dec15 ist in der Tat 2016-12-01 ... Es gibt keine Möglichkeit, das zu beheben Single app mit config so weit ich weiß (http://stackoverflow.com/questions/9104084/how-doi-iset-cultureinfo-currentculture-from-an-app-config-file) - aber wenn du kannst ' Um das fehlerhafte Parsing zu beheben, können Sie Ihre Benutzer bitten, Änderungen vorzunehmen Region zu was auch immer Sie mögen ... –

Antwort

2

Da Dec15 kein Standard-DateTime-Format ist, denke ich, dass der Parser es unabhängig von der bereitgestellten Kultur nicht erkennt.

Um es richtig zu analysieren, können Sie die ParseExact Methode verwenden, um ein Format zu schaffen, zu verwenden:

var date = DateTime.ParseExact("Dec15", "MMMyy", CultureInfo.InvariantCulture); 

Das bietet Ihnen dann ein DateTime Objekt weiter zu analysieren, wie Sie benötigen.

+0

Ja eine robustere Lösung, aber würde eine neue Version benötigen. Ich hoffe, dass es auf der Client-Seite etwas gibt, das das beheben kann. – RobCroll

2

Alles funktioniert gut, und wie Sie sehen können, wird die Kultur nicht ignoriert, weil Sie CultureInfo manuell angeben müssen, um das gewünschte falsche Ergebnis zu erhalten.

Ich bin 100% sicher, dass, wenn man sich Thread.CurrentThread.CurrentUICulture schauen, werden Sie unterschiedliche Ergebnisse in der Maschine in Australien und den USA

Die Parsing Current wird immer mit sehen. Wenn Sie ein festes Format haben wollen, verwenden Sie einfach DateTime.ParseExact Methode.

Oder können Sie die Kultur für die Anwendung zwingen as shown here

Auch möchten Sie vielleicht bei this aussehen

+1

aber sollte nicht übergeben CultureInfo-Klasse zu Parse-Methode von Datetime, sollte für diesen Methodenaufruf überschreiben? – Baahubali

+0

Ja, sollte es. Aber von meinem Verständnis der ursprüngliche Code verwendet ein Argument Überladung der Methode –

+0

Original-Code ist das erste Snippet und ich erwartete, dass es die "en-AU" Kultur Datum Formatierung verwenden – RobCroll

Verwandte Themen