2016-11-22 5 views
2

Wir haben eine Tabelle namens Record in db, die einige Einträge enthält. Es hat unter SpaltZeitzonenänderungsberechnungen nach UTC nach Benutzer Zeitzone

Id(uniqueidentifier) 
SubmittedDate(DateTime) 
RecordNumber(uniqueidentifier) 

unterhalb der Linie stellt eine Reihe von Rekord,

Id          RecordNumber     SubmittedDate 
'CD458C6D-9F45-41C1-85D8-E3D8287A82B4', 'EBB5DE3A-4B14-4112-AF51-0F8367FE3383' '2016-11-02 08:27:17.300' 

Benutzerdatensatz von einem der Zeitzone einreichen kann. Als Best Practice speichern wir DateTime in UTC. Also, wie pro Benutzer Zeitzone konvertieren wir Datetime in UTC und speichert es Tabelle.

Nun muss ich Ergebnis als Anzahl der Datensätze von Benutzer nach Datum zurückgeben. Wir müssen Datensätze nach Benutzer Zeitzone zurückgeben.

Wenn der Benutzer 10 Datensätze am 22Nov2016 um 01:00 Uhr morgens eingereicht hat und keine Datensätze am Datum 21Nov2016 übermittelt wurden und der Benutzer zur IST-Zeitzone gehört. Auf der Serverseite konvertieren wir 22Nov2016 01:00 AM in IST und speichern es als 21Nov2016 09:00 PM UTC

Wenn der gleiche Benutzer fragt, um Datensätze für die letzten 5 Tage am 24. November zu erhalten, fügen wir Offset der aktuellen Benutzer Zeitzone dh (+5: 30) in die Spalte SubmittedDate und Abrufen von Datensätzen entsprechend. So, dass wir die richtige Anzahl von Datensätzen erhalten sollten, die der Benutzer als Zeitzone pro Benutzer gesendet hat. Nach dem Hinzufügen von UTC-Offset zu SubmittedDate-Datum bekomme ich die korrekte Anzahl von Datensätzen, d. H. 10 für das Datum 22Nov2016.

Diese Lösung funktioniert nicht, wenn sich der UTC-Offset während der Sommerzeit ändert, d. H. Wenn die Zeitzone von PST in PDT konvertiert wird und umgekehrt.

dieses haben wir von Benutzer in der Tabelle hinzugefügt Zeitzone Spalte zu überwinden, wenn Benutzer recods

Id (unique) SubmittedDate (Datetime) Record (unique) SubmittedTimeZone (varchar)

So abgegeben hat, a) Wenn der Benutzer den Datensatz aus der Zeitzone abruft, in dem die Sommerzeit eingeschaltet ist und der gesendete Datensatz auch gesendet wird, wenn die Sommerzeit eingeschaltet ist, machen wir nichts aus.

b) Wenn ein Benutzer den Datensatz aus der Zeitzone abruft, in dem die Sommerzeit eingeschaltet ist und der Datensatz gesendet wurde, wenn die Sommerzeit ausgeschaltet war, fügen wir 1 Stunde Offset hinzu.

c) Wenn der Benutzer den Datensatz aus der Zeitzone abruft, in dem die Sommerzeit ausgeschaltet ist und der gesendete Datensatz gesendet wird, wenn die Sommerzeit eingeschaltet ist, dann addieren wir -1 Stunde zum Offset.

d) Wenn ein Benutzer den Datensatz aus der Zeitzone abruft, in dem die Sommerzeit ausgeschaltet ist und der Datensatz auch gesendet wird, wenn die Sommerzeit nicht aktiv ist, machen wir nichts aus.

Ist dies der richtige Umgang mit Zeitzonen/Sommerzeit für verschiedene Zeitzonen?

Anmerkung: Wir identifizieren vorgelegten Rekord auch vorgelegt wird, wenn die Sommerzeit dort durch Spalte SubmittedTimeZone Wert waren ist letzten zwei Worte als ‚Daylight Time‘ wie ‚ALASKA Daylight Time‘, ‚Eastern Daylight Time‘ hat

ist es hier möglich, dass die Sommerzeit ist in einer Zeit Zeitzone auf einer anderen Zeitzone ist ausgeschaltet. Möglicherweise müssen wir den Offset für die Zeitzone des anfordernden Benutzers auf der Grundlage des übermittelten Datums und der übermittelten Zeitzonenspalten berechnen.

Antwort

0

In diesem Fall können wir nicht zu Übermittelt Datetime Offsetzumischung wie mit dem Effekt der Sommerzeit ändern wird ausgeglichen.

So Der Offset, wenn Benutzer sendet Aufzeichnungen und wenn er Anzahl der Datensätze abfragen können eingereicht unterschiedlich sein. Dies führt zu einer falschen Anzahl von Datensätzen.

Lösung zu diesem wird die Zeitzone des anfragenden Benutzers bekommen und submittedDatetime Wert für jeden Datensatz in anfragende Benutzer Zeitzone konvertieren und dann die Berechnungen der Anzahl der Datensätze als Datum übertragen.

Hinweis: For conversion of DateTime into particular datetime

Verwandte Themen