Frage

Soweit ich den Unterschied Betreiber der DateTime Art kennen hält Schaltjahre: so

new DateTime(2008, 3, 1) - new DateTime(2008, 2, 1) // should return 29 days
new DateTime(2009, 3, 1) - new DateTime(2009, 2, 1) // should return 28 days

Aber was ist die Sommerzeit?

War es hilfreich?

Lösung

Ich glaube nicht, es wird. Die Dokumentation einfach sagt, dass ein Datetime gespeichert wie die Anzahl der Ticks seit 12.00.00 Mitternacht, 1. Januar 0001, aber es sagt nicht, in welcher Zeitzone tatsächlich die Mitternacht - ich würde davon ausgehen, dass, wenn es intern immer in UTC gespeichert wurde, würden sie sagen, so.

Sie können ganz einfach, um dies allerdings zu erhalten: Just do:

var difference = Dt1.ToUniversalTime() - Dt2. ToUniversalTime()

und die Umsätze zu UTC wird Konto Tageslichtsparungen nehmen in

Andere Tipps

.NET nicht die Sommerzeit richtig handhaben, auch wenn es Antworten gibt Sie wollen. Sie wollen falsche Antworten.

Kurzversion:

  • Wie kann .NET wissen, dass das ganze Jahr über im Jahr 1977 die Sommerzeit in Kraft war, wegen der Energiekrise?

  • Wie kann .NET wissen, was die Sommer Regeln in Israel sein werden, wenn die Regeln von Jahr zu Jahr entschieden von der Knesset?

  • Wie ist .NET zu wissen, dass die USA auf DST das ganze Jahr über im Zweiten Weltkrieg lief, und von 1945 bis 1966 die Regeln von DST Region zu Region variiert, und die Regeln immer noch von Region zu Region unterschiedlich sein.

.NET versucht, einen Rückzieher, und verwendet die aktuellen Regeln Tageslichtsparungen, auch wenn sie nicht oder werden in der Tat. Das Ergebnis ist, dass Sie die Antworten bekommen, die zwar sind das, was Sie denken, Sie wollen, sind falsch.

Raymond Chen 's Blog-Eintrag, Warum Sommerzeit ist nicht intuitiv :

  

Warum nicht die (win32) Zeitzone Konvertierungsfunktionen die Zeitzone angemessen für die Zeit des Jahres benutzen?

     

...

     

Win32 nicht versucht, zu erraten, was   Zeitzonenregeln waren in der Tat auf, dass   andere Zeit. So Win32 sagt: „ Donnerstag,   17. Oktober 2002 08.45.38 PST “.

     

Hinweis: Pacific Standard Zeit. Sogar   obwohl 17. Oktober war während Pazifik    Daylight Zeit, zeigt Win32 die Zeit   als Standardzeit, weil das ist, was   Zeit, es ist jetzt .

     

.NET sagt: „ Nun, wenn die Regeln in   Effekt war jetzt auch in Wirkung auf   17. Oktober 2003, das wäre dann   Sommerzeit “so ist es angezeigt   „Thursday, 17. Oktober 2003, 09.45 Uhr   PDT.“- Sommerzeit

So sind die Antworten, die Sie sind falsch. Aber da Sie die falsche Antwort erwarten, es ist das, was man bekommt.

Die Sommerzeit ist spezifischer als die allgemeinen 12 Zeitzonen und in welchen Ländern verwendet sie.

Verschiedene Länder oder Ländergruppen nutzen unterschiedliche Zeitpunkte für, wenn DST passiert.

es ist ein bisschen wie ein Schmerz wirklich nicht die Länder zu nennen, die es nicht tun, oder Teile von Ländern.

Zum Beispiel Queensland, doenst AU haben DST inspite der Rest des Landes der Fall ist.

würde ich nicht überrascht, wenn es nicht den Fall ist, in dem Fall, dass es nicht wäre es nicht in der Lage sein, es zu tun mit einem Culture 9AT Geringsten).

Es wird nicht, und es kann in der Tat nicht , basiert auf der Tatsache, dass es nicht entweder Kraft Sie UTC zu verwenden, um einen Datetime zu konstruieren Sie werden auch nicht festlegen können, ob DST war in der Tat wenn Sie einen Datetime mit einem lokalen Zeitwert aufzubauen. Darüber hinaus erlaubt es der Modus (LT oder UTC) „nicht spezifiziert“ zu sein, was nur idiotisch ist.

Durch den Bau von Datetime-Werten aus Lokalen Zeit Werten ermöglichen, dann ist es möglich, einen Datetime-Wert (angegeben als Ortszeit) zu konstruieren, die (zum Beispiel nicht eindeutig ist jederzeit zwischen 1 und 2.00 Uhr am 2. November in den USA, wenn den lokalen Stunde wiederholt sich) und nicht deterministisch zu UTC umgewandelt werden kann zurück, ES SEI dENN, der Konstruktor bereitgestellt einen Parameter für die Angabe, ob DST in für die jeweilige Ortszeit war Affekt .

Da es keine solche Parameter bereitstellt, ist die Gestaltung der Klasse Datetime unvollständig und fehlerhaft, gescheitert, alle Parameter zu berücksichtigen korrekt notwendig ist, um eine lokale Zeit angeben.

Ich denke, das ist, warum sie die Datetime Klasse geschaffen, die ..., wenn Sie verwirrt waren, warum eine solche scheinbar redundante Klasse existiert ... das ist der Grund.

Als Ergebnis sollten Sie niemals mit einer Datetime-Instanz jede Art von Berechnung tun, die nicht auf DateTimeMode.Utc gesetzt. Nur UTC verwenden. Sie können tatsächlich nicht entweder zu oder von LT konvertieren, weil sie durch zwei verschiedene Bugs BUSTED ist, in beiden Richtungen. 1. von LT zu UTC gehen wird, weil kaputt, wie erwähnt, es nicht zulässt, dass Sie angeben, ob DST für diese eine mehrdeutige Stunde in LT in Kraft war. Oh, es erlaubt Ihnen auch eine lokale Stunde angeben, die im Grunde unmöglich, wie die Stunde ist, die wir überspringen, wenn die Uhren voraus festgelegt werden. 2. Wenn ein UTC-Wert in der Vergangenheit zu einer lokalen Zeit Konvertierung Windows-Schrauben, die nach oben durch für DST Verrechnung je nachdem, ob es nun in Kraft ist, sondern dass die gegebene Zeit, die ernsthaft asinine ist. Natürlich, dieses Problem bemerkt haben Sie vielleicht, wenn eine Änderung Zeit, die Sie notiert hat, gespeichert oder im Namen einer Datei verwendet wird, zeigt 1 Tag eine Stunde OFF in Windows-Explorer auf. Nein, Sie nicht verrückt sind, dann hat Windows nur einen schwerwiegenden Fehler drin, die sie nie die Zeit gefunden zu beheben irgendwo zwischen der Veröffentlichung von DOS und dem neuesten .NET-Framework (~ 2 Dekaden)! Natürlich wirkt sich das Bug-CVS-Systeme und alles, was Änderungszeiten verfolgt. Das FAT-Dateisystem speichert Zeiten als Ortszeit, was bedeutet, dass es gerade komplett verschraubt.

Testen Sie es und sehen!

Es ist nur so einfach, einen Test zu schreiben, wie Sie für den DST Fall getan haben, wie es für das Schaltjahr Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top