PostgreSQL 时间戳转换中的奇怪时区
Strange time zone in PostgreSQL timestamp conversion
这个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';
然后我得到预期的结果。
在发明 UTC 之前,每个城市都有自己的本地时间,彼此之间大多只有几分钟的差异。
在时区标准化(以及每个人各自采用)之后,当地时间被设置为我们今天所知道的值。
这就是为什么您会得到这些古代日期的奇怪结果,特别是 1900 年之前的日期。
实际上,台北仅在 Jan 1st of 1896 才从 UTC+08:06
更改为 UTC+08:00
,因此在它之前的日期会有 +08:06
偏移量。
如果您将时区设置为 UTC,则不会发生这种情况,主要是因为 UTC 的偏移量为零且永远不会改变。
这个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';
然后我得到预期的结果。
在发明 UTC 之前,每个城市都有自己的本地时间,彼此之间大多只有几分钟的差异。
在时区标准化(以及每个人各自采用)之后,当地时间被设置为我们今天所知道的值。
这就是为什么您会得到这些古代日期的奇怪结果,特别是 1900 年之前的日期。
实际上,台北仅在 Jan 1st of 1896 才从 UTC+08:06
更改为 UTC+08:00
,因此在它之前的日期会有 +08:06
偏移量。
如果您将时区设置为 UTC,则不会发生这种情况,主要是因为 UTC 的偏移量为零且永远不会改变。