Tyvärr erbjuder PostgreSQL ingen tidszonsdatatyp, så du bör förmodligen använda text
.
interval
verkar vara ett logiskt alternativ vid första anblicken, och det är lämplig för vissa användningsområden. Den tar dock inte hänsyn till sommartid och tar inte heller hänsyn till det faktum att olika regioner i samma UTC-offset har olika sommartidsregler.
Det finns ingen 1:1-mappning från UTC-förskjutning tillbaka till tidszon.
Till exempel tidszonen för Australia/Sydney
(New South Wales) är UTC+10
(EST
), eller UTC+11
(EDT
) under sommartid. Ja, det är samma akronym EST
som USA använder; tidszonsakronymer är icke-unika i tzdata-databasen, vilket är anledningen till att Pg har timezone_abbreviations
miljö. Ännu värre, Brisbane (Queensland) har nästan samma longitud och ligger i UTC+10 EST
... men har inte sommartid, så någon gång är den på -1
offset till New South Wales under NSW:s sommartid.
(Uppdatera :Mer nyligen antog Australien en A
prefix, så den använder AEST
som dess öststater TZ akronym, men EST
och WST
förbli i allmänt bruk).
Förvirrar du mycket?
Om allt du behöver lagra är en UTC-offset sedan ett interval
är passande. Om du vill lagra en tidszon , lagra den som text
. Det är jobbigt att validera och konvertera till en tidszonförskjutning för tillfället, men det klarar åtminstone sommartid.