最近碰到个问题,就是在处理 America/Whitehorse
时,执行程序上进行获取时区为 GMT-7
,但是在前端包跟 MySQL
的 CONVERT_TZ
上获取却变成了 GMT-8
。最后我去 google 了一把,发现正确的时区应该是 GMT-7
,这把我弄乱了,这个时区到底是啥。如果是 -7 的话,那么 MySQL 中该怎么处理呢。
1
aureole999 2021-11-17 14:45:39 +08:00
盲猜夏令时
|
2
wangkun025 2021-11-17 14:46:30 +08:00
whitehourse 笑了。
|
3
mason961125 2021-11-17 14:51:18 +08:00
@aureole999 冬令时了吧...
|
4
wwbfred 2021-11-17 14:57:02 +08:00
|
5
wangkun025 2021-11-17 15:10:04 +08:00
@wwbfred 查到了。谢谢你。
|
6
wuxi889 OP |
7
wwbfred 2021-11-17 15:41:41 +08:00
|
8
xiaopc 2021-11-17 16:27:12 +08:00
根据 time .is 上面的提示,加拿大育空地区(白马市为其首府)在 2020 年取消了夏令时 /冬令时,统一为 PDT ( UTC-7 )时区
2020 年前,America/Whitehorse 分别使用 PST ( UTC-8 )和 PDT ( UTC-7 )这两个时区 问题可能是没更新软件和时区数据 MySQL 应该直接存 UTC ,在应用层再转换 |
9
Sylv 2021-11-17 16:27:45 +08:00 4
研究了下,发现这个问题其实比夏冬令时复杂点,有点意思:
America/Whitehorse 是加拿大育空省( Yukon )的时区标识符,白马市( Whitehorse )是育空省的省会,也是唯一一个城市。 2020 年以前,育空时间( Yukon Time )是和太平洋时间( Pacific Time )保持一致的:夏时令是 UTC-7 (三月第二个星期日 2 am → 3 am ),冬时令是 UTC-8 (十一月第一个星期日 2 am → 1 am )。 2020 年,育空省立法通过从 2020 年起取消冬时令,育空时间全年停留在夏时令 UTC-7 。 (育空省从四万多居民中收到了 4,829 份有效的调查问卷,其中 93% 支持取消夏冬令时制度,而在其中 70% 支持停留在夏时令 UTC-7 。) 除了育空省以外,加拿大和美国多省州也在推动取消夏冬令时制度,可谓大势所趋。 -- 所以今天这日期( 2021-11-17 ):在 2020 年以前,America/Whitehorse 是 UTC-8 ;在 2020 年以后,America/Whitehorse 是 UTC-7 。 你的「前端包跟 MySQL 」应该是没有更新,还采用过时的时区数据,所以就出现了这个问题。 |
12
Buges 2021-11-17 20:00:10 +08:00 via Android
所有时间的处理永远用 UTC ,只在显示的时候根据 locale 格式化成对应的时区和格式。
|
13
renmu123 2021-11-17 20:01:14 +08:00 via Android
时区是一个超级复杂的东西,历史遗留很多,之前有听 ggtalk 还是哪个播客聊过
|
14
Tumblr 2021-11-17 20:54:51 +08:00
|
15
xiaopc 2021-11-17 22:18:52 +08:00
@Tumblr
America/Whitehorse 是 IANA 时区标识符 Wikipedia 上 Pacific Time Zone 条目: In the United States and Canada, this time zone is generically called the Pacific Time Zone. Specifically, time in this zone is referred to as Pacific Standard Time (PST) when standard time is being observed, and Pacific Daylight Time (PDT) when daylight saving time is being observed. |
16
julyclyde 2021-11-18 10:47:06 +08:00
想当年朝鲜改成“东 8.5”时区,windows 过了大概 9 个月才发布更新
然后朝鲜又改回去了…… |