Rất tiếc, PostgreSQL không cung cấp kiểu dữ liệu múi giờ, vì vậy bạn có thể nên sử dụng text
.
interval
Thoạt nhìn có vẻ như là một lựa chọn hợp lý và nó là thích hợp cho một số mục đích sử dụng. Tuy nhiên, nó không xem xét thời gian tiết kiệm ánh sáng ban ngày, cũng như không xem xét thực tế là các khu vực khác nhau trong cùng độ lệch UTC có các quy tắc DST khác nhau.
Không có ánh xạ 1:1 từ độ lệch UTC trở lại múi giờ.
Ví dụ:múi giờ cho Australia/Sydney
(New South Wales) là UTC+10
(EST
) hoặc UTC+11
(EDT
) trong thời gian tiết kiệm ánh sáng ban ngày. Đúng, đó là từ viết tắt giống nhau EST
mà Hoa Kỳ sử dụng; Các từ viết tắt của múi giờ không phải là duy nhất trong cơ sở dữ liệu tzdata, đó là lý do tại sao Pg có timezone_abbreviations
cài đặt. Tệ hơn, Brisbane (Queensland) ở gần như cùng một kinh độ và ở UTC+10 EST
... nhưng không có tiết kiệm ánh sáng ban ngày, vì vậy đôi khi nó ở mức -1
bù cho New South Wales trong DST của NSW.
( Cập nhật :Gần đây hơn, Úc đã thông qua A
tiền tố, vì vậy nó sử dụng AEST
là từ viết tắt TZ của các tiểu bang phía đông của nó, nhưng EST
và WST
vẫn được sử dụng phổ biến).
Khó hiểu nhiều?
Nếu tất cả những gì bạn cần lưu trữ là UTC offset sau đó là một interval
là thích hợp. Nếu bạn muốn lưu trữ một múi giờ , lưu trữ nó dưới dạng text
. Thật khó để xác thực và chuyển đổi sang độ lệch múi giờ vào lúc này, nhưng ít nhất nó cũng đối phó được với DST.