Laden...

Wie kann ich am besten Zeitzonen in einer Datenbank ablegen?

Erstellt von LiMuBai vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.060 Views
L
LiMuBai Themenstarter:in
13 Beiträge seit 2013
vor 5 Jahren
Wie kann ich am besten Zeitzonen in einer Datenbank ablegen?

Hallo,

ich stehe derzeitig etwas auf dem Schlauch wie ich am besten Zeitzonen in der DB hinterlege.
Ich habe erstens auf dem Server einen Task welcher anhand von hinterlegten Uhrzeiten einen Schichtwechsel vornimmt. Dabei werden User von Maschinen abgemeldet und vorangemeldete Mitarbeiter angemeldet. Weiterhin muss ich auf der Website (Intranet) welche der User an der Maschine sieht die derzeitige Uhrzeit anzeigen.

Der Server steht hier in Deutschland und Mitarbeiter können aus Werken rund um den Globus über die Webseite darauf zurückgreifen.

Nun war mein erster Ansatz in der Verwaltung für die Maschinen die Zeitzonen über TimeZoneInfo.GetSystemTimeZones() als Dropdownliste auszugeben und der Admin wählt davon eine aus um diese in der DB zu hinterlegen. Als Wert wollte ich nun die ID verwenden (Bsp: W. Europe Standard Time oder West Asia Standard Time) da ich aufgrund von unterschiedlichen Winter- bzw. Sommerzeiten nicht einfach UTC+1 hinterlegen kann.

Nun könnte es aber meiner Meinung trotzdem 1 Problem geben.
Mit den kommenden Änderungen an Sommer- / Winterzeit kann es schon innerhalb von "W. Europe Standard Time" zu unterschiedlichen Uhrzeiten kommen.

Gibt es hierfür eine sinnvolle Lösung oder muss ich das vielleicht sogar ganz anders angehen?

grüße daniel

16.806 Beiträge seit 2008
vor 5 Jahren

Zeiten in Datenbanken sollten prinzipiell immer Neutral abgespeichert werden; also UTC.
Das verhindert Missstände in der Datenbank.

Zeitzonen werden i.d.R. in der Ansicht oder Logik beachtet (dann zB. via ToLocalTime()).

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

@Abt - ich glaube LiMuBai meinte etwas anderes - quasi eine Id für eine Zeitzone in der Datenbank hinterlegen.

Wurde auf StockOverflow schonmal erfragt:
https://stackoverflow.com/questions/11580423/what-is-the-best-way-to-store-timezone-information-in-my-db

Kurzform: TimeZoneInfo.Id pro Maschine in der Datenbank hinterlegen. Die eigentlichen Zeiten in UTC speichern - und nur zur Anzeige mit Hilfe von http://msdn.microsoft.com/en-us/library/system.timezoneinfo.findsystemtimezonebyid.aspx in die "Maschinen"-Zeit umrechnen.

LG

L
LiMuBai Themenstarter:in
13 Beiträge seit 2013
vor 5 Jahren

Hallo,

danke euch erstmal für die Antworten.
Derzeitig lege ich auch die ID in der DB ab und berechne dann später die jeweilige Uhrzeit anhand der hinterlegten Zeitzone.

Ich habe nur etwas in die Zukunft gedacht und mir selber ein Problem geschaffen.
Wenn es wirklich soweit kommt das Deutschland zum Beispiel bei Winterzeit bleibt und Dänemark bleibt bei Sommerzeit, kann man das mit den derzeitigen Zeitzonensystem nicht mehr richtig abbilden.

Ich belasse es jetzt aber erstmal bei dem jetzigen System und lasse mich überraschen was die Zukunft bringt.