PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xử lý múi giờ đặc biệt trong cơ sở dữ liệu Postgres

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 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:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres UPDATE to_tsvector cập nhật tất cả các hàng thành cùng một giá trị

  2. Bắt lỗi hàm to_date (dấu thời gian không có múi giờ, không xác định) không tồn tại

  3. ActiveRecord ::StatementInvalid:PG InFailedSqlTransaction

  4. sqlalchemy đối xứng nhiều thành một tình bạn

  5. Làm cách nào để bật php hoạt động với postgresql?