postgresql – 为什么时区在Postgres的0001年具有如此疯狂的UTC
在Postgres 9.5中,我很惊讶地看到下面的结果,同时试验了0001年(没有零年0000).
抵消-07:52:58? 一些示例代码.请注意,我混合使用 SET TIME ZONE 'America/Los_Angeles' ; SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0',TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z',TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ; ("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00") 我对第二个值感到惊讶:0001-12-31 16:07:02-07:52:58 BC.我知道我们必须向后退八小时,因为America / Los_Angeles比UTC低8小时,偏移为-08:00.但不是-08:00而是-07:52:58.为什么? UTC下无问题 在UTC下输入数据时没有这样的问题. SET TIME ZONE 'UTC' ; SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0',TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z'); ("2015-01-01 00:00:00+00","0001-01-01 00:00:00+00","0001-01-01 00:00:00") 没有零年 顺便说一句,日期部分似乎是正确的.似乎没有0000年,这是“BC”和“AD”时代之间的支点.在0001年的第一个时刻,减去一个小时,你得到公元前0001年 – 所以没有零年. SET TIME ZONE 'UTC' ; INSERT INTO moment_ -- TIMESTAMP WITH TIME ZONE. VALUES ( TIMESTAMP '0001-01-01 00:00:00.0Z' - INTERVAL '1 hour' ) ; SET TIME ZONE 'UTC' ; TABLE moment_ ; 结果是公元前0001年,所以我们从0001跳到公元前0001年;没有一年零0000. "0001-12-31 23:00:00+00 BC"
1883年11月18日中午12点(新时间),美国铁路采用标准时间.
这意味着在此之前,洛杉矶使用实际的当地时间,基于平均太阳时.之后,它被移动到当地时区,这是与格林威治标准时间相差几小时的积分,与前一时间略有不同. 想知道更多? >从IANA: Time zones下载tzdata时区数据库.
另请注意,这不是Postgresql特有的.这适用于使用tzdata数据库的任何软件或操作系统(当然,许多将限制在1970年后或1901年后的日期,所以1883年是无法实现的,但是在所有地方还有许多其他调整不同时期). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |