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

Làm thế nào để chuyển đổi từ giờ địa phương sang UTC?

Điều này được đề cập trong hướng dẫn sử dụng , nhưng không phải lúc nào cũng rõ ràng làm thế nào để thực sự làm việc với ngày / giờ. Thông số SQL hơi kỳ lạ.

Trong trường hợp câu hỏi của bạn, không rõ bạn có muốn lưu trữ thời gian bằng UTC hay không nhưng hiển thị nó theo giờ địa phương của máy chủ (TimeZone ), hoặc liệu bạn có muốn bỏ qua TimeZone và luôn hiển thị nó dưới dạng UTC. Tôi sẽ giả sử cái sau.

Đối với dấu thời gian, bạ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 sử dụng AT TIME ZONE hai lần. Một lần để chuyển đổi đầu vào timestamp đến timestamptz theo múi giờ đối số, rồi đến múi giờ khác để chuyển đổi múi giờ đó thành timestamp lúc UTC.

Thật không may vì cách (IMO điên rồ) mà đặc tả SQL xác định AT TIME ZONE trong TIME , bạn không thể làm điều tương tự trong TIME . Bạn sẽ phải thao tác TimeZone thay vào đó:

SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';

Điều này vẫn để lại cho bạn timetz không phải là time . Vì vậy, giá trị hiển thị của nó thay đổi theo timezone cài đặt.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHỌN từ một bảng, CHÈN vào hai bảng khác dựa trên điều kiện

  2. Tìm sự khác biệt giữa các dấu thời gian tính bằng giây trong PostgreSQL

  3. Cách INTERSECT dữ liệu từ các bảng trên postgres

  4. Làm thế nào để biểu diễn nhiều thuộc tính tương tự của một thực thể trong cơ sở dữ liệu?

  5. Tôi có nên ngắt kết nối () nếu tôi đang sử dụng Connect_cached () của Apache ::DBI?