Viele Antworten geben hier das Speichern als UTC an. Aber sei wirklich vorsichtig damit. Wenn Sie beispielsweise einen Termin um 12:00 Uhr planen, der Termin jedoch nach der Umstellung auf Sommerzeit stattfindet, was passiert dann? UTC speichert keine Informationen darüber, ob dst aktiv war, als der Termin gespeichert wurde. Viele große, bekannte Systeme haben diesen Fehler gemacht, bei dem ein Benutzer im Sommer um 9 Uhr morgens eine E-Mail sendet und im Winter die Sendezeit 8 Uhr morgens anzeigt, da die Rückrechnung von UTC davon abhängt, wann Sie die Datumszeit betrachten. Nicht an, wenn die Datums- / Uhrzeitangabe aufgezeichnet wurde.
Viel besser ist es anzunehmen, dass Ihr Benutzer die von ihm ausgewählten Zeiten immer haben möchte. Keine UTC-Konvertierung, keine Zeitkonvertierung, keine Zeitzoneninformationen, nichts. Genau das ist es, wenn Sie am 21. März 2016 von 08:00 bis 12:00 Uhr einen Termin vereinbaren. Verwenden Sie weder die Ortszeit noch die UTC-Zeit, sondern die nicht angegebene Zeit (in json hat dies weder z noch +, im Grunde genommen hat dies in .NET DateTime.Kind = DateTimeKind.Unspecified).
Wenn Ihr Anwendungsfall ist, dass Sie ein Unternehmen sind, das Besprechungen mit einer Person aus verschiedenen Zeitzonen abhält, und diese Informationen beispielsweise in einem Unternehmenskalender angezeigt werden sollen, können Benutzer jedoch die Uhrzeit in ihrer Zeitzone anzeigen wird komplizierter. Die Zeit muss für verschiedene Personen in verschiedenen Zeitzonen (Lieferant und Kunde) korrekt sein.
In diesen Fällen möchten Sie möglicherweise sogar aufzeichnen, wann der Termin in der Datenbank gespeichert wurde, in welcher Zeitzone und ob dies dst beinhaltet oder nicht. Auf diese Weise können Sie die Ortszeit immer auf etwas anderes zurückrechnen, entweder auf das, was jetzt wäre, oder auf das, was historisch beabsichtigt war. Weil Zeitzonen nicht statisch sind, wird die Sache noch komplizierter.
Zum Glück kommen hier Bibliotheken wie http://nodatime.org/ ins Spiel , die sehr zu empfehlen sind. Sie arbeiten viel konsequenter mit Daten. Selbst dann würde ich empfehlen, alle Ihre datetime-Variablen und -Logik in Ihre eigenen Wrapper zu packen und Schnittstellen zu verwenden, damit sie verspottet werden können, und dann können Sie die Logik später noch wechseln.