2009-02-14 3 views
6

Ich bin auf einer Website arbeiten, die alle Benutzer können dann diese Einträge mit etwas Text zu sagen, wie lange zum Beispiel, bis diese Einträge sind aktuell Benutzer hinzufügen Kalendereinträge, auf der Hauptseite kannASP.Net Zeit Lokalisierung

Eintrag 1: 5 Minuten
Eintrag 2: 7 Stunden
Eintrag 3: 4 Tage

Das Problem, das ich habe, ist, dass jeder in verschiedenen Zeitzonen sein könnte. Ich habe beschlossen, dass ich alle Zeiten/Daten in GMT speichern möchte.

Was ich sturggling ist, wenn ein Benutzer einen Kalendereintrag für 1/1/2009 10:30 AM absendet, muss ich dann herausfinden, was dieses Datum in GMT für die Speicherung ist. Gibt es eine Möglichkeit zu wissen, was die lokale Zeitzone/Zeit des Benutzers ist, so kann ich es mit der Serverzeit (GMT) vergleichen, um die Konvertierung durchzuführen?

Ich hoffe wirklich, dass dies sinnvoll ist. Ich hoffe, dass ich das tun kann, ohne den Benutzer fragen zu müssen, in welcher Zeitzone er sich befindet, oder den Benutzer dazu zu zwingen, alle Zeitangaben in GMT einzugeben.

Antwort

5

COnvert die Datetime auf GMT-Client-Seite (in JavaScript, wenn dies eine Web-App ist) vor dem Senden an den Server. Lass den Server nur mit GMT arbeiten (ich würde sagen UTC). Dasselbe gilt für die Anzeige von Datum/Uhrzeit. Senden Sie GMT/UTC an den Client und lassen Sie JS lokalisieren. Dies ist meines Erachtens der einzig sichere Weg, denn Sie überlassen es dem Betriebssystem des Anwenders, herauszufinden, wie spät es sein soll.

Es gibt andere Ansätze der Ursache, und wenn Sie nur wissen müssen, was die Zeit des Clients gerade ist, können Sie nur den Offset davon erhalten (kann durch JS usw. abgerufen werden). Aber wenn Sie genaue Daten/Zeiten an verschiedenen Orten für historische und zukünftige Datum/Zeiten benötigen, lassen Sie besser den Kunden damit umgehen.

PS: In meiner TimeZone-Implementierung verwende ich auch UNIX-Zeitformat für die Kommunikation zwischen Client und Server. Dies ist einfach einfacher zu parsen, und ich glaube, es ist das native Datetime-Format für JS. Ich kann Ihnen meinen Code jetzt nicht vorstellen, sollte aber relativ einfach dafür googeln.

1

Ihre einzige Option (neben expliziten Benutzerwahl) ist die Zeitzone aus dem Browser-Offset zu erhalten:

var tzOffset = new Date().getTimezoneOffset(); // Minutes 

Dann müssen Sie es an den Server zu senden, indem ein verstecktes Feld oder einem anderen geeigneten Ansatz.

Dadurch erhalten Sie nur einen Zeitzonen-Offset, keine vollständige Zeitzoneninformation. Dies ist nicht sehr zuverlässig, so würde ich dem Benutzer die Wahl überlassen, aber diese Information verwenden, um eine geeignete Zeitzone vorzuwählen.