PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was ist ein geeigneter Datentyp zum Speichern einer Zeitzone?

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.