V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuxi889
V2EX  ›  问与答

苦于最近被时区整疯了,来 v 站求助

  •  
  •   wuxi889 · 2021-11-17 14:15:33 +08:00 · 2750 次点击
    这是一个创建于 1097 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近碰到个问题,就是在处理 America/Whitehorse 时,执行程序上进行获取时区为 GMT-7 ,但是在前端包跟 MySQLCONVERT_TZ 上获取却变成了 GMT-8。最后我去 google 了一把,发现正确的时区应该是 GMT-7,这把我弄乱了,这个时区到底是啥。如果是 -7 的话,那么 MySQL 中该怎么处理呢。

    19 条回复    2021-11-19 09:19:31 +08:00
    aureole999
        1
    aureole999  
       2021-11-17 14:45:39 +08:00
    盲猜夏令时
    wangkun025
        2
    wangkun025  
       2021-11-17 14:46:30 +08:00
    whitehourse 笑了。
    mason961125
        3
    mason961125  
       2021-11-17 14:51:18 +08:00
    @aureole999 冬令时了吧...
    wwbfred
        4
    wwbfred  
       2021-11-17 14:57:02 +08:00
    @aureole999 夏令时是调快一个小时啊,变成 GMT-6
    @wangkun025 有个地方叫 Whitehorse ,在加拿大。
    wangkun025
        5
    wangkun025  
       2021-11-17 15:10:04 +08:00
    @wwbfred 查到了。谢谢你。
    wuxi889
        6
    wuxi889  
    OP
       2021-11-17 15:31:23 +08:00
    @wwbfred
    @mason961125

    不对,不管夏令时还是冬令时,都只是 3 月 或 11 月的某某天调快或调慢一个小时,时区是不会变的
    wwbfred
        7
    wwbfred  
       2021-11-17 15:41:41 +08:00
    xiaopc
        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 ,在应用层再转换
    Sylv
        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 」应该是没有更新,还采用过时的时区数据,所以就出现了这个问题。
    wuxi889
        10
    wuxi889  
    OP
       2021-11-17 16:39:07 +08:00
    @xiaopc
    @Sylv

    哈哈哈,我也查到了。感谢两位。
    wwbfred
        11
    wwbfred  
       2021-11-17 19:57:18 +08:00
    @Sylv 神奇的操作,从没想过还有这样的😂
    不过调表说实话还是挺狗的,取消应该是大势所趋。
    Buges
        12
    Buges  
       2021-11-17 20:00:10 +08:00 via Android
    所有时间的处理永远用 UTC ,只在显示的时候根据 locale 格式化成对应的时区和格式。
    renmu123
        13
    renmu123  
       2021-11-17 20:01:14 +08:00 via Android
    时区是一个超级复杂的东西,历史遗留很多,之前有听 ggtalk 还是哪个播客聊过
    Tumblr
        14
    Tumblr  
       2021-11-17 20:54:51 +08:00
    @wwbfred #7 @xiaopc #8 两位是把 time zone 和时间的 offset 搞混了,time zone 是不会变化的,DST 变的是 offset 。
    不过这个问题#9 大佬 @Sylv 已经给出解释了,10 月底我们的 team meeting 上来聊到过这个话题(我当时只是单纯吐槽 DST 搞得要订会议太恶心,然后几个地方的小伙伴就聊起来了,也说到了取消)。
    xiaopc
        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.
    julyclyde
        16
    julyclyde  
       2021-11-18 10:47:06 +08:00
    想当年朝鲜改成“东 8.5”时区,windows 过了大概 9 个月才发布更新
    然后朝鲜又改回去了……
    wuxi889
        17
    wuxi889  
    OP
       2021-11-18 14:04:05 +08:00
    @julyclyde 哈,现在还有好多 .5 时区的,我们都取消这些时区选择了。太蛋疼了
    julyclyde
        18
    julyclyde  
       2021-11-18 18:20:42 +08:00
    @wuxi889 这还是得看业务需求吧……user generated 数据如果就在那个时区呢?
    wuxi889
        19
    wuxi889  
    OP
       2021-11-19 09:19:31 +08:00
    @julyclyde 是看需求,直接把 .5 时区的选项给砍了,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2633 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.