myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Grundlagen von C# (https://www.mycsharp.de/wbb2/board.php?boardid=88)
--- Wie kann ich am besten Zeitzonen in einer Datenbank ablegen? (https://www.mycsharp.de/wbb2/thread.php?threadid=121666)


Geschrieben von LiMuBai am 12.03.2019 um 07:55:
  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


Geschrieben von Abt am 12.03.2019 um 15:30:
 
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()).


Geschrieben von Taipi88 am 12.03.2019 um 15:37:
 
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


Geschrieben von LiMuBai am 13.03.2019 um 12:04:
 
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.


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.12.2019 04:02