代码之家  ›  专栏  ›  技术社区  ›  Rogach

postgresql中的时区转换

  •  0
  • Rogach  · 技术社区  · 6 年前

    timestamp with time zone ):

    test=# select ('2018-05-31T21:00:00+00'::timestamptz);
          timestamptz       
    ------------------------
     2018-05-31 21:00:00+00
    (1 row)
    

    我想把它转换成另一个时区,例如UTC+2 at time zone 应该为我做:


    <timestamp with time zone> AT TIME ZONE <zone>
    返回类型
    timestamp without time zone

    将给定的带时区的时间戳转换为新时区,不指定时区

    here .

    但当我试着去做的时候,我得到了奇怪的结果:

    test# select ('2018-05-31T21:00:00+00'::timestamptz) at time zone 'utc+2';
          timezone       
    ---------------------
     2018-05-31 19:00:00
    (1 row)
    

    我很确定UTC的21小时等于UTC+2的23小时(这就是 +2

    我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Laurenz Albe    6 年前

    你的问题是POSIX标准 according to the documentation 法令规定

    要记住的另一个问题是,在POSIX时区名称中,正偏移量用于格林威治以西的位置。在其他地方,PostgreSQL遵循ISO-8601约定,即正时区偏移位于格林威治以东。