Warum speicherst du UTC nicht gleich in der DB? In den meisten Fällen DateTime
sollten in UTC gespeichert werden, da sie sich in der Regel auf einen Zeitpunkt beziehen. Dies gilt für alles, was sich auf Zeit im physikalischen Sinne bezieht, und alles, was davon ausgeht, dass Zeit monoton, zunehmend und einzigartig ist, von denen keines für die meisten lokalen Zeiten gilt.
Gelegentlich ist es sinnvoll, Ortszeiten zu verwenden:Angenommen, ein Bus fährt jeden Tag um 9 Uhr morgens ab. Das bedeutet, dass zwischen zwei aufeinanderfolgenden Ereignissen 24 Stunden vergehen. Wenn die Zeitzone jedoch eine Sommerzeit hat, wird es einmal im Jahr ein 23-Stunden- bzw. 25-Stunden-Intervall sein.
Wenn Sie diese Art von Daten jedoch verarbeiten müssen, ist ein einfacher DateTime
funktioniert nicht; Sommerzeitregeln können sich ändern, Zeitzonen können sich ändern usw. In C# werden die Sommerzeitregeln angewendet, die derzeit gelten gültig, auch wenn das Datum 'historisch' ist. Datumsarithmetik mit historischen Daten kann also verheerende Folgen haben. Wenn Sie damit wirklich fertig werden müssen, sollten Sie zumindest welche speichern Zeitzone, in der sich die Zeit befindet (nicht nur der Offset oder sogar nur ein isLocal
Flagge).
Das Speichern von Textinformationen in der Datenbank, die binär gespeichert werden können, erscheint mir nicht sehr elegant, ebenso wenig wie das Ändern des Werts in einer mittleren Schicht. Ersteres ist ineffizient und leidet unter den zuvor erwähnten Besonderheiten der Ortszeit, letztere hat nur das 2. Problem.
Übrigens, um Letzteres zu erreichen, könnten Sie die Eigenschaft mit [BsonDateTimeOptions(Kind=DateTimeKind.Local)]
dekorieren , das die Konvertierung für Sie übernimmt, aber natürlich unter denselben Problemen leidet.