PostgreSQL时间戳转换中的奇怪时区

时间:2017-06-29 08:43:33

标签: postgresql timestamp timezone-offset timestamp-with-timezone postgresql-9.6

这个SQL:

select to_timestamp(extract(epoch from '0001-01-01 00:00:00'::timestamp))

生成此输出:

  

0001-01-01 08:06:00 + 08:06

我意识到to_timestamp()总是会添加一个时区,因此在时区段中会额外增加8小时和+8。但:06是什么?额外的6分钟来自哪里?

修改

如果我最初执行set local timezone to 'UTC';,那么我会得到预期的结果。

1 个答案:

答案 0 :(得分:3)

在UTC发明之前,每个城市都有自己的当地时间,彼此差不多只有几分钟。

在时区标准化之后(以及每个人的相应采用),当地时间被设定为我们今天所知的价值。

这就是为什么你在古代日期得到这些奇怪的结果,特别是在1900年之前。

实际上,台北仅在Jan 1st of 1896中从UTC+08:06更改为UTC+08:00,因此它之前的日期将会+08:06偏移。

如果将时区设置为UTC,则不会发生这种情况,主要是因为UTC的偏移量为零并且永远不会发生变化。