"+ hh: mm" und "-hh: mm" sind keine Zeitzonen, sie sind UTC-Offsets. Ein gutes Format, um diese zu speichern, ist eine vorzeichenbehaftete Ganzzahl mit dem Offset in Minuten. Sie können auch Dinge wie interval
verwenden, aber das wird Ihnen nur helfen, wenn Sie Datumsberechnungen direkt in PostgreSQL, wie in einer Abfrage usw. machen wollen. Normalerweise tun Sie diese Berechnungen in einer anderen Sprache, und dann hängt es von dieser Sprache ab unterstützt die interval
Typ gut und hat eine gute Datum/Uhrzeit-Bibliothek oder nicht. Aber die Umwandlung einer ganzen Zahl in eine Art von interval
-ähnlichen Typ, wie Pythons timedelta
sollte trivial sein, so würde ich persönlich nur speichern es als eine ganze Zahl.
Zeitzonen haben Namen, und obwohl es keine standardisierten Namen für die Zeitzonen gibt, gibt es in der Datenbank "tz" oder "zoneinfo" einen De-facto-Standard, und zwar Namen wie "Europe/Paris", "Americas/New_York "oder" US/Pacific ". Diese sollten als Strings gespeichert werden.
Windows verwendet völlig andere Namen wie "Romance time" (nicht fragen). Sie können sie ebenso wie Strings speichern, aber ich würde es vermeiden, diese Namen werden nicht außerhalb von Windows verwendet, und die Namen ergeben keinen Sinn.Außerdem verwenden übersetzte Versionen von Fenstern tendenziell übersetzte Namen für diese Zeitzonen, was sie noch schlimmer macht.
Abkürzungen wie "PDT" und "EST" sind nicht als Zeitzonennamen verwendbar, da sie nicht eindeutig sind. Es gibt vier (ich denke, oder war es fünf?) Verschiedene Zeitzonen, die alle "CST" genannt werden, also ist das nicht verwendbar.
Kurz: Speichern Sie den Namen für Zeitzonen als Zeichenfolge. Bei UTC-Offsets speichern Sie den Offset in Minuten als eine Ganzzahl mit Vorzeichen.
Gibt es einen Link zu den kanonischen Textstrings (Australien/Sydney) für alle Zeitzonen? – odigity
Ja: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones – odigity
Wenn Sie die Leistung + Platz sparen (und Portabilität/Flexibilität reduzieren möchten), würde tz Datenbank + enum gut sein –