Speichern DateTime (UTC) vs. Speicherung DateTimeOffset
Habe ich meistens ein "interceptor", der rechts vor dem Lesen/schreiben aus/in der Datenbank ist DateTime Konvertierung (von UTC in die lokale Zeit und lokaler Zeit auf UTC), so kann ich mit DateTime.Now
(Ableitungen und Vergleiche), die im gesamten system, ohne sich Gedanken über Zeitzonen.
Hinsichtlich Serialisierung und verschieben von Daten zwischen Computern, gibt es keine Notwendigkeit, die Mühe, als die datetime ist immer UTC.
Soll ich weiterhin die Speicherung meiner Daten (SQL 2008 - datetime -) im UTC-format oder sollte ich stattdessen speichern Sie es mit DateTimeOffset
(SQL 2008 - datetimeoffset)?
UTC Datumsangaben in der Datenbank (datetime-Typ) arbeiten und so lange bekannt, warum es ändern? Was sind die Vorteile?
Ich habe schon geschaut in den Artikel wie diese eineaber ich bin mir nicht zu 100% überzeugt obwohl. Irgendwelche Gedanken?
InformationsquelleAutor der Frage Frederico | 2011-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einen großen Unterschied, wo Sie nicht verwenden können, UTC allein.
Wenn Sie Szenario wie dieses
Dann:
Aber:
Einfaches Beispiel ist Flug ticket Reservierungs-system ... Flug ticket enthalten sollte 2 mal:
- "take off" - Zeit (in der Zeitzone der "Aus" - Stadt)
- "Landung" - Zeit (in der Zeitzone der "Destination", city)
InformationsquelleAutor der Antwort Thetam
Sind Sie absolut richtig, zu verwenden UTC-für alle historischen Zeiten (D. H. die Aufzeichnung von Ereignissen passiert ist). Es ist immer möglich, gehen von UTC in die lokale Zeit, aber nicht immer Umgekehrt.
Wann die lokale Zeit verwenden? Beantworten Sie diese Frage:
Nur lokal speichern Zeit, wenn die Antwort ist "ja". Offensichtlich werden, die nur für Termine in der Zukunft, und in der Regel nur für Termine, die Auswirkungen auf die Menschen in gewisser Weise.
Warum speichern einer Zeitzone/offset?
Erstens, wenn Sie das aufnehmen wollen, was der offset wurde für den Benutzer, der die Aktion durchgeführt, würden Sie wahrscheinlich am besten, einfach zu tun, d.h. bei der Anmeldung notieren Sie die Position und Zeitzone für diesen Benutzer.
Zweitens, wenn Sie möchten, konvertieren Sie für die Anzeige, die Sie benötigen, um eine Tabelle aller lokalen Zeit-offset übergänge für die, die Zeitzone, einfach zu wissen, der aktuelle offset ist nicht genug, denn wenn Ihr zeigt das Datum/die Zeit von sechs Monaten der offset wird anders sein.
InformationsquelleAutor der Antwort Ben
Einen DATETIMEOFFSET bietet Ihnen die Möglichkeit zum speichern der lokalen Zeit und der UTC-Zeit in einem Feld.
Dies ermöglicht eine sehr einfache und effiziente Berichterstattung in der lokalen oder UTC-Zeit, ohne die Notwendigkeit der Verarbeitung der Daten für die Anzeige in keiner Weise.
Diese sind die zwei häufigsten Anforderungen - die lokale Zeit für lokale Berichte und UTC-Zeit für die Gruppe Berichte.
Die lokale Zeit gespeichert wird, in der DATETIME-Teil des DATETIMEOFFSET und den OFFSET von UTC gespeichert wird in der OFFSET-Teil, also die Konvertierung ist einfach, denn es erfordert keine Kenntnis von der Zeitzone, die Daten kamen, kann alles getan werden, auf der Datenbank-Ebene.
Wenn Sie ihn nicht benötigen mal hinunter zu Millisekunden, z.B. nur um Minuten oder Sekunden, die Sie verwenden können, DATETIMEOFFSET(0). Der DATETIMEOFFSET-Feld wird dann nur erfordert 8 Byte Speicherplatz, das gleiche wie, ein DATETIME.
Mithilfe eines DATETIMEOFFSET eher als einen UTC-DATETIME gibt somit mehr Flexibilität, Effizienz und Einfachheit für die Berichterstattung.
InformationsquelleAutor der Antwort PapillonUK