我正在考虑简单地使用格式为“+hh:mm”(或“-hh:mm”)的字符串。这是必要且充分的吗?
注意:我不需要存储日期或时间,只需存储时区。
不幸的是 PostgreSQL 不提供时区数据类型,所以你应该使用text
.
interval
乍一看似乎是一个合乎逻辑的选择,而且它is适合某些用途。但它没有考虑夏令时,也没有考虑同一UTC偏移量的不同地区有不同的DST规则。
不存在从 UTC 偏移量到时区的 1:1 映射。
例如,时区Australia/Sydney
(新南威尔士州)是UTC+10
(EST
), or UTC+11
(EDT
)在夏令时期间。是的,这是相同的缩写EST
美国使用的;时区缩写在 tzdata 数据库中不是唯一的,这就是为什么 Pg 具有timezone_abbreviations
环境。更糟糕的是,布里斯班(昆士兰州)几乎处于同一经度,并且位于UTC+10 EST
...但没有夏令时,所以有时会在-1
在新南威尔士州 DST 期间向新南威尔士州偏移。
(Update:最近澳大利亚通过了一项A
前缀,所以它使用AEST
作为其东部各州 TZ 的缩写,但是EST
and WST
仍被普遍使用)。
很混乱吗?
如果您需要存储的只是UTC 偏移量然后一个interval
是合适的。如果你想存储一个时区,将其存储为text
。目前验证并转换为时区偏移量很痛苦,但至少它可以应对 DST。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)