【问题标题】:Corresponding local time of UTC timeUTC时间对应当地时间
【发布时间】:2020-01-15 01:23:36
【问题描述】:

我有一组 UTC 时间:

UTC_date
-------------------
2015-10-24 16:38:46
2016-01-19 18:27:00
2016-01-24 16:14:34
2016-02-09 23:05:49
2016-02-11 20:46:26

我想知道这些时间对应的当地时间,我在CDT时区,应该比UTC晚5或6小时。 这是我需要的结果:

UTC_date                         CDT_date
------------------------------------------------
2015-10-24 16:38:46             2015-10-24 11:38:46
2016-01-19 18:27:00             2016-01-19 12:27:00
2016-01-24 16:14:34             2016-01-24 11:14:34
2016-02-09 23:05:49             2016-02-09 18:05:49
2016-02-11 20:46:26             2016-02-11 15:46:26

我尝试了 UTC_date::timestamp AT 时区 'CDT',但这会适得其反。我可以使用什么 PostgreSQL 查询?

【问题讨论】:

    标签: sql postgresql date timestamp timestamp-with-timezone


    【解决方案1】:

    假设utc_date是一个没有时区的时间戳,你可以这样做:

    select 
        utc_date, 
        utc_date at time zone 'utc' at time zone 'cdt' cdt_date 
    from mytable
    

    逻辑是先指示Postgres时间戳在utc,然后翻译成目标时区。

    Demo on DB Fiddle

    utc_date | cdt_date :----------------- | :----------------- 2015-10-24 16:38:46 | 2015-10-24 11:38:46 2016-01-19 18:27:00 | 2016-01-19 13:27:00 2016-01-24 16:14:34 | 2016-01-24 11:14:34 2016-02-09 23:05:49 | 2016-02-09 18:05:49 2016-02-11 20:46:26 | 2016-02-11 15:46:26

    【讨论】:

    • 您应该使用 IANA 时区(又名奥尔森)数据库,而不是 'cdt'。在这种情况下,“美国/芝加哥”或“美国/中部”。全名自动调整夏令时;缩写 cdt 或 cst 没有。
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2015-09-26
    • 1970-01-01
    • 2019-08-25
    • 2011-03-25
    • 2014-10-18
    相关资源
    最近更新 更多