DateTime.ToLocalTime () in der Winter- / Sommerzeit

8

Ich verwende DateTime.ToLocalTime() , um Daten von UTC in lokale Zeit umzurechnen. Meine Zeitzone ist GMT + 1 (Belgrad, Budapest, Lubjna ...), sie ist in Windows-Einstellungen (XP) richtig eingestellt.

Am letzten Wochenende in unserer Zeitzone sind wir in Winterzeit in Sommerzeit gewechselt, dh wir haben die Ortszeit um eine Stunde zurückgestellt.

Wie ich sehe, verhält sich die ToLocalTime-Methode von diesem Moment an seltsam. Wenn ich es verwende, um Daten zu konvertieren, die sich nach dieser Winterzeit ändern, funktioniert es großartig, so:

%Vor%

utcDate1.ToLocalTime() Wert ist: 2011.11.02. 10:00:00 ist korrekt

Burt, wenn ich ein Datum vor dieser Änderung (z. B. ein Datum von Sommerzeit) konvertieren möchte, gibt es einen schlechten Wert wie folgt zurück:

%Vor%

utcDate2.ToLocalTime() Wert ist: 2011.10.23. 10:00:00 Es ist falsch Es sollte 2011.10.23 sein. 11:00:00

Was soll ich tun, um korrekte Werte zu erhalten? Wie sollte ich ToLocalTime verwenden, die auch die Winter- / Sommerzeit anpasst?

    
Tom 02.11.2011, 11:36
quelle

4 Antworten

6

Ссылка

  

Auf Windows XP-Systemen erkennt die ToLocalTime-Methode nur die   aktuelle Anpassungsregel bei der Konvertierung von UTC in Ortszeit. Als ein   Ergebnis, Konvertierungen für Zeiträume vor der aktuellen Anpassungsregel   in Kraft trat möglicherweise nicht genau den Unterschied zwischen UTC   und Ortszeit.

Sie müssen also einen anderen Weg finden, es herauszufinden.

    
John Sobolewski 02.11.2011, 11:40
quelle
1

Meine Vermutung ist, dass die Zeitzonendaten auf Ihrem System möglicherweise veraltet sind - oder aufgrund der Einschränkung, die jsobo erwähnt hat.

Eine Option, die Sie möglicherweise (vorsichtig) verfolgen möchten, ist die Verwendung meiner Datum / Zeit-API, Noda Zeit . Dies hat die Konvertierung zu / from DateTime , so dass %

Noda Time ist noch nicht "v1.0-ready", aber hauptsächlich wegen ein paar fehlenden Features. Ob Sie das Risiko eines nicht-v1.0-Open-Source-Projekts eingehen wollen oder nicht, liegt natürlich bei Ihnen, aber ich würde mich sehr freuen, Ihnen bei allen Problemen zu helfen, mit denen Sie zu tun haben. (Ich versuche wirklich, Anwendungsfälle im wirklichen Leben zu finden. Wenn also Funktionen fehlen, die Sie brauchen, kann ich sie wahrscheinlich im Vorgriff auf andere implementieren, die dasselbe brauchen.)

Noda Time verwendet die zoneinfo-Zeitzonendatenbank, nicht die in Windows integrierte Zone, daher sollte es nicht die gleichen Probleme haben.

Um zu überprüfen, würden Sie Code wie folgt verwenden:

%Vor%     
Jon Skeet 02.11.2011 11:51
quelle
1

Ich benutze die gleiche Zeitzone, und wenn ich es versuche, bekomme ich die richtigen Werte:

%Vor%

Ausgabe:

%Vor%     
Guffa 02.11.2011 11:54
quelle
0

.NET führt einige Berechnungen hinter den Kulissen durch. Ich empfehle Ihnen, diesen Artikel von Raymond Chen über implizite Zeitzonen-Conversions zu lesen.

    
Heinrich Ulbricht 02.11.2011 11:42
quelle

Tags und Links