За съжаление PostgreSQL не предлага тип данни за часова зона, така че вероятно трябва да използвате text .
interval на пръв поглед изглежда като логична опция и е подходящи за някои употреби. Той обаче не взема предвид лятното часово време, нито пък взема предвид факта, че различните региони в едно и също UTC отместване имат различни правила за лятно часово време.
Няма съпоставяне 1:1 от UTC отместването обратно към часовата зона.
Например часовата зона за Australia/Sydney (Нов Южен Уелс) е UTC+10 (EST ), или UTC+11 (EDT ) по време на лятното часово време. Да, това е същото съкращение EST които САЩ използват; акронимите на часовите зони не са уникални в базата данни tzdata, поради което Pg има timezone_abbreviations настройка. Още по-лошо, Бризбейн (Куинсланд) е на почти същата дължина и е в UTC+10 EST ... но няма лятно часово време, така че понякога е на -1 изместване към Нов Южен Уелс по време на лятното часово време на NSW.
(Актуализиране :Съвсем наскоро Австралия прие A префикс, така че използва AEST като акроним TZ на източните щати, но EST и WST остават в обща употреба).
Много ли обърквате?
Ако всичко, което трябва да съхраните, е UTC отместване след това interval е подходящо. Ако искате да съхраните часова зона , запазете го като text . В момента е трудно да се валидира и да се конвертира към отместване на часовата зона, но поне се справя с DST.