1085 Stimmen

DateTime vs. DateTimeOffset

Was ist der Unterschied zwischen einer DateTime und eine DateTimeOffset und wann sollte eine solche verwendet werden?


Derzeit haben wir eine Standardmethode für den Umgang mit .NET DateTime s in einer TimeZone-gerechten Weise: Wann immer wir eine DateTime wir machen es in UTC (z. B. mit DateTime.UtcNow ), und jedes Mal, wenn wir eine anzeigen, konvertieren wir von UTC in die Ortszeit des Benutzers zurück.

Das funktioniert gut, aber ich habe gelesen, dass DateTimeOffset und wie es die Orts- und UTC-Zeit im Objekt selbst erfasst.

0 Stimmen

Wenn es um die Lagerung geht, stackoverflow.com/questions/4715620/ ist ebenfalls interessant.

3 Stimmen

Für Neugierige ist vielleicht auch interessant Die Speicherung von UTC ist kein Patentrezept

36voto

Dean Harding Punkte 69243

Es gibt ein paar Orte, an denen DateTimeOffset macht Sinn. Zum einen, wenn es um wiederkehrende Ereignisse und die Sommerzeit geht. Nehmen wir an, ich möchte einen Alarm einstellen, der jeden Tag um 9 Uhr ausgelöst wird. Wenn ich die Regel "als UTC speichern, als Ortszeit anzeigen" verwende, wird der Alarm um 9 Uhr ausgelöst. verschiedene Zeit, wenn die Sommerzeit in Kraft ist.

Es gibt wahrscheinlich noch andere, aber das obige Beispiel ist tatsächlich eines, das mir in der Vergangenheit begegnet ist (das war vor der Hinzufügung von DateTimeOffset in die BCL zu übertragen - meine damalige Lösung bestand darin, die Uhrzeit explizit in der lokalen Zeitzone zu speichern und die Zeitzoneninformation mit abzuspeichern: im Grunde das, was DateTimeOffset intern tut).

36voto

Blundell Punkte 72729

TLDR wenn Sie nicht all diese tollen Antworten lesen wollen :-)

Ausdrücklich :

Verwendung von DateTimeOffset weil die Zeitzone auf UTC+0 festgelegt ist.

Implizit :

Verwendung von DateTime wo Sie Hoffnung alle halten sich an die ungeschriebene Regel, dass die Zeitzone immer UTC+0 ist.


(Nebenbemerkung für Entwickler: explizit ist immer besser als implizit !)

(Nebenbei bemerkt, für Java-Entwickler, C# DateTimeOffset == Java OffsetDateTime , lesen Sie dies: https://www.baeldung.com/java-zoneddatetime-offsetdatetime )

34voto

Tessaract Punkte 498

DateTime.Now
Fri 03 Dec 21 18:40:11

DateTimeOffset.Now
Fri 03 Dec 21 18:40:11 +02:00

Also, DateTimeOffset speichert Informationen darüber, wie sich die Zeit zur UTC verhält, also die Zeitzone.

8voto

Joe Punkte 117971

Ein wesentlicher Unterschied besteht darin, dass DateTimeOffset kann in Verbindung verwendet werden mit TimeZoneInfo für die Umrechnung in Ortszeiten in anderen Zeitzonen als der aktuellen.

Dies ist bei einer Serveranwendung (z. B. ASP.NET) nützlich, auf die von Benutzern in verschiedenen Zeitzonen zugegriffen wird.

3voto

Tony Wall Punkte 1378

Die einzige negative Seite von DateTimeOffset, die ich sehe, ist, dass Microsoft "vergessen" (durch Design), es in ihrer XmlSerializer-Klasse zu unterstützen. Aber es wurde inzwischen in die XmlConvert-Dienstprogrammklasse aufgenommen.

XmlConvert.ToDateTimeOffset

XmlConvert.ToString

Ich sage, gehen Sie voran und verwenden Sie DateTimeOffset und TimeZoneInfo wegen all der Vorteile, nur Vorsicht bei der Erstellung von Entitäten, die wird oder kann zu oder von XML (alle Business-Objekte dann) serialisiert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X