【问题标题】:PostgreSQL update time zone offsetPostgreSQL 更新时区偏移量
【发布时间】:2011-09-23 11:22:39
【问题描述】:

有什么快速简便的方法可以更正时区TIMESTAMP WITH TIME ZONE 字段意外输入错误的时区?

在我的情况下,以下记录被错误地输入为 UTC 而不是美国/太平洋:

           t0           |           t1           |     what
------------------------+------------------------+---------------
 2011-06-01 13:00:00+00 | 2011-06-01 13:10:00+00 | recalibrating
 2011-06-01 13:10:00+00 | 2011-06-01 13:45:00+00 | verifying
 2011-06-01 13:45:00+00 | 2011-06-01 13:55:00+00 | FAULT

幸运的是,所有错误记录都没有跨越夏令时边界,因此 2 点 UTC 可以简单地纠正为 2 点太平洋。

【问题讨论】:

    标签: sql postgresql timezone timestamp


    【解决方案1】:

    有强制转换,更重要的是,at time zone 运算符对这类事情很有用,例如:

    test=#  select now(),
                   now()::timestamp;
    
                  now              |            now             
    -------------------------------+----------------------------
     2011-06-27 14:32:04.169292+02 | 2011-06-27 14:32:04.169292
    (1 row)
    
    test=# select now() at time zone 'utc',
                 (now() at time zone 'utc')::timestamp with time zone;
    
              timezone          |           timezone            
    ----------------------------+-------------------------------
     2011-06-27 12:32:28.430479 | 2011-06-27 12:32:28.430479+02
    (1 row)
    

    【讨论】:

      【解决方案2】:
      UPDATE <table>
      SET <timestamptz_field> = 
        (<timestamptz_field> AT TIME ZONE 'UTC') AT TIME ZONE '<correct_time_zone>';
      

      【讨论】:

        猜你喜欢
        • 2014-12-28
        • 2011-01-07
        • 1970-01-01
        • 2016-03-04
        • 2011-09-02
        • 2011-12-11
        • 2011-08-04
        • 1970-01-01
        • 2019-06-25
        相关资源
        最近更新 更多