Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren einer beliebigen Datumszeit von der Serverzeit in die Benutzerzeit (Umgang mit Standard- und Sommerzeit)

TimeZoneInfo tut, ja. (Es ist Teil des .NET-Frameworks, nicht Teil von C# - C# ist nur die Sprache, die Sie zufällig verwenden.) Ich glaube jedoch nicht, dass Sie das wirklich wollen.

Warum speichern Sie die DateTime im Server Zeitzone sowieso? Es wäre in den meisten Fällen sinnvoller, es in UTC zu speichern. Abgesehen von allem anderen, wenn sich Ihr Server in einer Zeitzone befindet, in der die Sommerzeit eingehalten wird, werden Sie am Ende für eine Stunde pro Jahr Unklarheiten haben, wenn die Uhr zurückgeht. (Die gleiche Ortszeit kommt zweimal vor.)

Sobald Sie es als UTC gespeichert haben, sollten Sie es Ihrem Javascript-Client auch als UTC geben. Während Sie sagen, dass Sie "ein Java-Skript haben, mit dem ich die Benutzer von UTC versetzen kann" - das hängt vom genauen Zeitpunkt ab. Da ich mich beispielsweise in Großbritannien befinde, beträgt mein Offset manchmal 0 und manchmal +1 Stunde. Wenn Sie die UTC an den Client zurückgeben, kann dieser die lokale Zeit aus dieser UTC-Zeit berechnen. Ihr Server kann dies nicht, es sei denn, Sie erhalten eine genaue Darstellung der Zeitzone vom Client zum Server, was im Allgemeinen eine knifflige Sache ist.

Auch hier ist C# selbst nicht relevant. Es ist nicht klar, welchen Teil des .NET-Frameworks Sie meinen – TimeZone ? TimeZoneInfo ? DateTime ? TimeZoneInfo enthält historische Daten, aber nur, wenn Sie eine Betriebssystemversion verwenden, die dies unterstützt.

Nun, soweit es dich wahrscheinlich interessiert. Es hat nicht so viele historische Daten wie TZDB, und es hat einige sehr seltsame Darstellungen für Russland und Namibia, aber es hat im Allgemeinen die Idee, dass sich die Regeln ändern.