Vấn đề dường như không liên quan đến Amazon RDS:nó liên quan đến quy ước được sử dụng bởi PostgreSQL. Trong trường hợp này, bạn làm có tên múi giờ ngược. Ý của bạn là 'UTC-01'
nơi bạn viết . 'UTC+01'
Từ hướng dẫn sử dụng :
Vì vậy, chuỗi múi giờ được sử dụng cho SET TIME ZONE
(và hiển thị SHOW timezone
, theo đó) hoặc AT TIME ZONE
cấu trúc sử dụng dấu hiệu ngược lại trong số những gì được hiển thị trong timestamp
(with time zone
) nghĩa đen! Đó là một sự bất đồng rất đáng tiếc giữa một mặt là ISO và tiêu chuẩn SQL và mặt khác là POSIX. (Tôi nghĩ POSIX đáng trách.) Xem:
Nhưng 'CET'
hoặc 'UTC-01'
cả hai vẫn có khả năng sai cho Paris vì họ không tuân theo các quy tắc về thời gian tiết kiệm ánh sáng ban ngày tính đến.
(DST là một trong những khái niệm mỉa mai nhất trong lịch sử loài người.)
Paris (giống như hầu hết châu Âu) sử dụng CET trong mùa đông và CEST trong mùa hè. Các bài kiểm tra của bạn với 'CET'
chỉ tình cờ làm việc vào tháng mười một. Nếu bạn thử tương tự vào mùa hè, bạn sẽ nhận được kết quả sai.
Để an toàn, hãy luôn sử dụng tên múi giờ 'Europe/Paris'
, xem xét các quy tắc DST. Cuộc gọi đắt hơn.
Hàm current_time
xem xét các quy tắc DST nếu cài đặt múi giờ của bạn ngụ ý bất kỳ. Nhưng 'UTC-01'
là một thời gian bù đắp đơn giản. Tôi không bao giờ sử dụng kiểu dữ liệu time with time zone
hoặc current_time
đầu tiên là. Hướng dẫn sử dụng một lần nữa:
Cân nhắc:
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC+01' AS plus_wrong
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC-01' AS minus_right
SELECT '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_winter
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CEST' AS cest_summer
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_no_dst -- CET wrong!
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_summer
, '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_winter
Có liên quan: