1

在 9.3.3 上,如果运行:

select EXTRACT(TIMEZONE FROM timestamp with time zone '1911-03-01 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1911-05-15 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1917-03-01 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1917-05-15 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1967-03-01 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1967-05-15 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1968-03-01 00:00 -8:00:00'), EXTRACT(TIMEZONE FROM timestamp with time zone '1968-05-15 00:00 -8:00:00');

一个得到以下结果:

0;0;
0;3600;
0;3600;
3600;3600

(第一次是拉斯维加斯的创始日,后面几个是我用来调试的问题)

似乎在 1911 年左右没有偏移,在 1911 年和 1967 年之间的夏季偏移,但没有冬季,然后从 1968 年开始总是有偏移。这似乎有点奇怪。有谁知道这里的偏移量是怎么回事,这是否是预期的行为,或者我的 linux 设置中是否有一些我可以改变的东西?

4

4 回答 4

3

时区因各种原因而变化。

夏令时规则发生变化。

如果各国出于政治原因重新定义时区,有时时区偏移也会发生变化。

规范的时区信息数据库是tz“zoneinfo”数据库,以前称为奥尔森数据库。zoneinfo 数据库位于 IANA 站点上。有多种程序可以转储数据库的人类可读版本

timestamp without time zone如果您希望将特定时刻存储在挂钟时间中,则可以使用,而无需考虑时区。

timestamp with time zone对输入和输出的系统TimeZone设置敏感,并以 UTC 时间存储为绝对秒数。所以它被转换为输入和输出。如果您想要不同的转换或覆盖转换,您可以使用AT TIME ZONE运算符。

于 2014-04-01T21:12:27.443 回答
1

如果您想存储拉斯维加斯(本地)时钟在城市成立之日标记为 00:00:00 的 INSTANT,并假设拉斯维加斯使用 -8 小时的偏移量,那么您应该存储1911-03-01 00:00 -8:00:00::timezonetxtimezonetx字段中。但是请注意,真正存储的只是“通用瞬间”,当您阅读它时,您无法知道它对应于哪个“拉斯维加斯当地时间”(除非您在阅读后明确将其转换为时区)。

于 2014-04-01T21:11:42.690 回答
1

您所在时区的规则是由法律规定的,并且法律会发生变化。

于 2014-04-01T19:47:25.707 回答
0

取决于你的时区,真的。1966 年,DST 于 1967 年在美国首次在全国范围内实施。各州需要通过法律来结束它,这意味着在许多地区,1967 年是唯一使用 DST 的一年。这可能会导致一些非常有趣的故障,其中除 1967/68 之外的每个日期都正常运行。

于 2016-08-09T17:17:20.020 回答