Leider bietet PostgreSQL keinen Zeitzonen-Datentyp, daher sollten Sie wahrscheinlich text
verwenden .
interval
scheint auf den ersten Blick eine logische Option zu sein, und ist sie für einige Verwendungen geeignet. Es berücksichtigt jedoch weder die Sommerzeit noch die Tatsache, dass verschiedene Regionen in derselben UTC-Verschiebung unterschiedliche DST-Regeln haben.
Es gibt keine 1:1-Zuordnung vom UTC-Offset zurück zur Zeitzone.
Zum Beispiel die Zeitzone für Australia/Sydney
(New South Wales) ist UTC+10
(EST
) oder UTC+11
(EDT
) während der Sommerzeit. Ja, das ist dasselbe Akronym EST
die die USA verwenden; Akronyme für Zeitzonen sind in der tzdata-Datenbank nicht eindeutig, weshalb Pg die timezone_abbreviations
hat Einstellung. Schlimmer noch, Brisbane (Queensland) liegt fast auf demselben Längengrad und in UTC+10 EST
... hat aber keine Sommerzeit, also manchmal -1
Versatz nach New South Wales während der Sommerzeit von NSW.
(Aktualisieren :In jüngerer Zeit hat Australien einen A
eingeführt Präfix, also verwendet es AEST
wie sein östliches Akronym TZ, aber EST
und WST
weiterhin gebräuchlich).
Viel verwirrend?
Wenn alles, was Sie speichern müssen, ein UTC-Offset ist dann ein interval
Ist angemessen. Wenn Sie eine Zeitzone speichern möchten , speichern Sie es als text
. Es ist im Moment mühsam zu validieren und in eine Zeitzonenverschiebung umzuwandeln, aber zumindest kommt es mit der Sommerzeit zurecht.