này được bao phủ trong manual, nhưng nó không phải luôn luôn rõ ràng làm thế nào để thực sự làm việc với các ngày/lần. Thông số SQL là một chút kỳ quái.
Trong trường hợp câu hỏi của bạn không rõ liệu bạn có muốn lưu trữ thời gian trong UTC hay không hiển thị thời gian địa phương của máy chủ (TimeZone
) hoặc bạn có thể bỏ qua TimeZone
và luôn hiển thị dưới dạng UTC hay không. Tôi sẽ giả định sau.
Đối với timestamps bạn muốn chỉ cần sử dụng AT TIME ZONE
hai lần, như:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Bạn cần phải sử dụng AT TIME ZONE
hai lần. Một lần để chuyển đổi đầu vào timestamp
thành timestamptz
theo múi giờ đối số, sau đó một chuyển đổi thành số timestamp
tại UTC.
Thật không may vì cách (IMO điên) thông số SQL xác định AT TIME ZONE
cho TIME
, bạn không thể làm tương tự cho TIME
. Bạn sẽ phải thao tác các biến TimeZone
thay vì:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
này vẫn để lại cho bạn một không timetz
một time
. Vì vậy, giá trị hiển thị của nó thay đổi với cài đặt timezone
.
Nguồn
2013-08-12 19:13:45
http://www.postgresql.org/docs/8.3/static/functions-datetime.html#FUNCTIONS-DATETIME-ZONECONVERT – AdamKG