Datetime-Zeitzonenanpassungen

8

Meine Datenbank befindet sich z.B. Kalifornien. Meine Benutzertabelle hat alle Zeitzonen des Benutzers, z. -0700 UTC

Wie kann ich die Zeit von meinem Datenbankserver einstellen, wenn ich ein Datum für den Benutzer, der z. New York? UTC / GMT -4 Stunden

    
public static 23.09.2008, 00:29
quelle

5 Antworten

4

Sie sollten Ihre Daten im UTC-Format speichern und im lokalen Zeitzonenformat anzeigen.

%Vor%

Sie können Datum / Uhrzeit mithilfe der AddXXX-Methodengruppe anpassen, es kann jedoch fehleranfällig sein. .NET unterstützt Zeitzonen in der Klasse System.TimeZoneInfo .

    
aku 23.09.2008 00:34
quelle
2

Wenn Sie .Net verwenden, können Sie TimeZoneInfo verwenden. Da du die Frage mit 'c #' markiert hast, gehe ich davon aus, dass du das tust.

Der erste Schritt besteht darin, die TimeZoneInfo für die Zeitzone zu erhalten, in die konvertiert werden soll. In Ihrem Beispiel die Zeitzone von NY. Hier ist ein Weg, wie Sie es tun können:

%Vor%

Nachdem Sie eine DateTime aus Ihrer Datenbank gelesen haben, müssen Sie sicherstellen, dass% code_% richtig eingestellt ist. Angenommen, die Kind in der Datenbank sind in UTC (übrigens wird das normalerweise empfohlen), können Sie es so konfigurieren, dass es wie folgt konvertiert wird:

%Vor%

Um schließlich in eine andere Zeitzone zu konvertieren, tun Sie dies einfach:

%Vor%

Einige zusätzliche Bemerkungen:

  • DateTime kann in statischen Feldern gespeichert werden, wenn Sie nur an bestimmten Zeitzonen interessiert sind;
  • TimeZoneInfo speichert Informationen zur Sommerzeit. Du musst dir deswegen keine Sorgen machen;
  • Wenn Ihre Anwendung ein Web ist, kann es schwierig sein, herauszufinden, in welcher Zeitzone sich Ihr Client befindet. Ein Weg wird hier erklärt: Ссылка

Ich hoffe, das hilft. :)

    
jpbochi 25.07.2009 21:56
quelle
0

Sie können eine Kombination aus TimeZoneInfo.GetSystemTimeZones () verwenden und dann die TimeZoneInfo.BaseUtcOffset-Eigenschaft verwenden, um die Zeit in der Datenbank basierend auf der Offset-Differenz

zu versetzen

Info zu System.TimeZoneInfo hier

    
JustinD 23.09.2008 00:36
quelle
0

Bis zu .NET 3.5 (VS 2008) bietet .NET keine integrierte Unterstützung für Zeitzonen, abgesehen von der Konvertierung in und aus UTC.

Wenn der Zeitunterschied das ganze Jahr über immer genau 3 Stunden beträgt (Sommer und Winter), verwenden Sie einfach yourDate.AddHours(3) , um den Wert in eine Richtung zu ändern, und yourDate.AddHours(-3) um es zurück zu ändern. Achten Sie darauf, dies in einer Funktion zu berücksichtigen, die den Grund für das Hinzufügen / Subtrahieren dieser 3 Stunden erklärt.

    
Laurent 23.09.2008 00:35
quelle
0

Sie wissen, das ist eine gute Frage. Dieses Jahr habe ich meine erste DB-Anwendung gemacht, und da meine Eingabedaten, die sich auf die Zeit beziehen, ein Int64-Wert ist, habe ich das in der Datenbank gespeichert. Meine Client-Anwendungen rufen es ab und führen DateTime.FromUTC () oder FromFileTimeUTC () für diesen Wert aus und führen eine .LocalTime () -Methode aus, um Dinge in ihrer lokalen Zeit anzuzeigen. Ich habe mich gefragt, ob das gut / schlecht / schrecklich war, aber es hat bisher gut genug für meine Bedürfnisse funktioniert. Natürlich wird die Arbeit von einer Datenzugriffsschichtbibliothek erledigt, die ich geschrieben habe und nicht in der Datenbank selbst.

Scheint gut genug zu funktionieren, aber ich vertraue darauf, dass andere, die mehr Erfahrung mit dieser Art von Dingen haben, darauf hinweisen könnten, wo dies nicht der beste Ansatz ist.

Viel Glück!

    
itsmatt 23.09.2008 00:50
quelle

Tags und Links