Bohužel PostgreSQL nenabízí datový typ časového pásma, takže byste pravděpodobně měli použít text .
interval na první pohled vypadá jako logická možnost a je vhodné pro některá použití. Nezohledňuje však letní čas ani skutečnost, že různé oblasti ve stejném offsetu UTC mají různá pravidla DST.
Neexistuje mapování 1:1 z offsetu UTC zpět do časového pásma.
Například časové pásmo pro Australia/Sydney (New South Wales) je UTC+10 (EST ), nebo UTC+11 (EDT ) během letního času. Ano, to je stejná zkratka EST které USA používají; Zkratky časových pásem nejsou v databázi tzdata jedinečné, a proto má Pg timezone_abbreviations nastavení. Horší je, že Brisbane (Queensland) je na téměř stejné zeměpisné délce a je v UTC+10 EST ... ale nemá letní čas, takže někdy je na -1 offset to New South Wales během NSW's DST.
(Aktualizovat :Nedávno Austrálie přijala A prefix, takže používá AEST jako jeho východní státy zkratka TZ, ale EST a WST zůstávají běžně používány).
Hodně matoucí?
Pokud vše, co potřebujete uložit, je offset UTC pak interval je vhodné. Pokud chcete uložit časové pásmo , uložte jej jako text . V tuto chvíli je těžké ověřovat a převádět na posun časového pásma, ale alespoň si poradí s DST.