C# – DateTimeOffset versus DateTime, warum Offsets verwenden?

C# – DateTimeOffset versus DateTime, warum Offsets verwenden?

DateTime und DatimeTimeOffset sind sehr ähnlich. Sie bestehen beide aus einem Datum und einer Uhrzeit, jedoch hat ein DateTimeOffset auch einen Offset, der einen Offset im Vergleich zur koordinierten Weltzeit (UTC) definiert.

Warum ist der Versatz wichtig? Nun, wenn Sie eine DateTime in einer SQL-Datenbank beibehalten, können Sie nicht sagen, in welcher Zeitzone sie sich befand. Mit dem DateTimeOffset haben Sie einen Offset, der Ihnen dies mitteilt. Solange eine DateTime ein Objekt ist, gibt es eine DateTime.Kind, die Ihnen sagt, ob es lokal, UTC oder nicht spezifiziert ist, aber diese Information geht bei Persistenz verloren.

Sie könnten die Regel haben, dass Sie alle Ihre DateTimes als UTC speichern. Ich habe jedoch oft festgestellt, dass Menschen dazu neigen, zu vergessen. Oftmals gilt die Regel, dass Sie DateTime.UtcNow anstelle von DateTime.Now verwenden müssen. Einfach richtig? Aber aus irgendeinem Grund wird dies oft vergessen. Wenn Sie versehentlich eine DateTime in LocalTime in Ihrer Datenbank speichern, wird es eine andere Zeit sein, wenn Sie sie als UTC abrufen.

Mit DateTimeOffset müssen Sie sich darüber keine Gedanken machen. Auch wenn Sie DateTimeOffset.Now verwenden, erhalten Sie einen Offset (+01:00 MEZ zum Beispiel), der eine absolute Zeit auf der Erde identifizieren kann. Wenn Sie Ihre Daten trotzdem in UTC speichern möchten, können Sie DateTimeOffset.UtcNow verwenden, was Ihnen ein DateTimeOffset mit dem Offset von +00:00 gibt (unter Berücksichtigung Ihrer aktuellen Ortszeit natürlich).

Der einzige Nachteil von DateTimeOffset - wie ich es sehe - ist, dass es 2 Bytes mehr benötigt, wenn es in Ihrer Datenbank gespeichert wird.

Ich hoffe, das hat dir geholfen, lass es mich in den Kommentaren wissen, wenn es so war!