相关疑难解决方法(0)

应用于时间戳时,具有相同属性的时区名称会产生不同的结果

我只是花了一个小时绝望,这两个表达式的结果有差异:


db=# SELECT '2012-01-18 1:0 CET'::timestamptz AT TIME ZONE 'UTC'
           ,'2012-01-18 1:0 Europe/Vienna'::timestamptz AT TIME ZONE 'UTC';
      timezone       |      timezone
---------------------+---------------------
 2012-08-18 00:00:00 | 2012-08-17 23:00:00
Run Code Online (Sandbox Code Playgroud)

显然,第二个表达式根据DST规则扣除两个小时,其中第一个表达式仅使用标准偏移量.

我检查了这两个时区名称的目录.他们都在那里,看起来一样:

db=# SELECT * FROM pg_timezone_names WHERE name IN ('CET', 'Europe/Vienna');
     name      | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
 Europe/Vienna | CEST   | 02:00:00   | t
 CET           | CEST   | 02:00:00   | t
Run Code Online (Sandbox Code Playgroud)

我查阅了关于时区PostgreSQL手册:

PostgreSQL允许您以三种不同的形式指定时区:

全时区名称,例如America/New_York.识别的时区名称列在pg_timezone_names视图中(参见第45.67节).PostgreSQL为此目的使用广泛使用的zoneinfo时区数据,因此许多其他软件也识别相同的名称.

时区缩写,例如PST.这样的规范仅定义了与UTC的特定偏移,而不是全时区名称,其也可以暗示一组夏令时转换日期规则.公认的缩写列在pg_timezone_abbrevs视图中(参见第45.66节).您不能将配置参数timezone或log_timezone设置为时区缩写,但可以在日期/时间输入值和AT TIME ZONE运算符中使用缩写.

大胆的重点我的.

为什么差异呢?

我的设置(添加了更多细节)

  • 关于Debian …

postgresql timezone datetime

7
推荐指数
1
解决办法
2179
查看次数

标签 统计

datetime ×1

postgresql ×1

timezone ×1