Tôi giả sử bạn có một cột có tên ct
có loại TIMESTAMPTZ
trong bảng t
. Sau đó, bạn có thể sử dụng:
SELECT EXTRACT(TIMEZONE FROM ct) FROM t;
để có được độ lệch của múi giờ tính bằng giây. Nó cung cấp cho bạn 3600
từ UTC
/ GMT
điều đó có nghĩa là GMT+1
, CET
hay bất cứ cái gì. Giá trị trả về phụ thuộc vào TIMEZONE
của bạn cài đặt.
Mẫu (Tôi sống ở Đức, múi giờ thực tế là GMT+1
/ CET
):
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 18:00:00+01
test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
timestamptz
------------------------
2008-01-01 17:00:00+00
Như bạn có thể thấy, nó luôn xuất ra bất kỳ thứ gì trong múi giờ đã định cấu hình. Vì vậy, phần bù bạn sẽ nhận được với EXTRACT(TIMEZONE FROM ...)
phụ thuộc vào TIMEZONE
của bạn cài đặt. Múi giờ được cung cấp trên INSERT
bị mất, bởi vì nó không đáng để được cứu. Điều quan trọng là mọi thứ đều chính xác và điều đó không phụ thuộc vào TIMEZONE
cài đặt. PostgreSQL làm điều đó rất tốt.