簡體   English   中英

如何補償夏時制 PostgreSQL

[英]How to compensate for daylight savings time PostgreSQL

我有一個 PostgreSQL 數據庫,其中時間戳存儲如下:

6/22/2022 11:00:00 AM EST

或者

12/22/2022 11:00:00 AM EDT

它們被保存為類型 TIMESTAMP(6)。

無論它是如何保存的,我都需要在當前的任何時區(EST 或 EDT)中檢索日期。 這必須在 PostgreSQL 而不是前端完成。

我看到的每個答案都提到,數據存儲方式的簡單改變是最好的解決方案。 就我而言,更改日期已存儲的方式以及以后如何存儲它們不是一種選擇,因此我必須找到另一種方法。

這甚至可能嗎?

假設您的服務器有一個涵蓋EST/EDT TimeZone


show timezone;
     TimeZone     
------------------
 America/New_York


select '6/22/2022 11:00:00'::timestamp::timestamptz;
      timestamptz       
------------------------
 2022-06-22 11:00:00-04


select '12/22/2022 11:00:00'::timestamp::timestamptz;
      timestamptz       
------------------------
 2022-12-22 11:00:00-05

要轉換為格式化字符串:


select to_char('12/22/2022 11:00:00'::timestamp::timestamptz, 'MM/DD/YYYY HH:MI:SS AM TZ');
          to_char           
----------------------------
 12/22/2022 11:00:00 AM EST

使用您的輸入的示例:

SELECT  t AS input
    , t at time zone 'EDT' AS edt
    , t at time zone 'EST' AS est
FROM    (VALUES('12/22/2022 11:00:00 AM EDT'::timestamptz)) s(t);

這就是我得到的輸出:

  • 2022-12-22 16:00:00+01
  • 2022-12-22 11:00:00
  • 2022-12-22 10:00:00

對於帶時區的時間戳,內部存儲的值始終為 UTC。 輸出帶有時區值的時間戳時,總是從 UTC 轉換為當前時區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM