gpt4 book ai didi

javascript - 如何猜测时间戳的时区?

转载 作者:行者123 更新时间:2023-12-05 03:10:10 27 4
gpt4 key购买 nike

上下文:

用户提供日期和时间,以及特定的 UTC 偏移量

1994-06-05T08:15:30-05:00

然后通过一些 Java 日期时间库传递,这些库确定这发生在夏令时,并有助于将一个小时添加到偏移量(如果时间戳不在夏令时,则不加修改地返回):

1994-06-05T08:15:30-04:00(请注意,当天的时间 15:30 未更改)

最后,我在前端 (javascript) 收到了该字符串,我只需要显示与输入时完全相同的原始 UTC 偏移量,在本例中为 -05:00

我无法更改导致这一点的过程的任何部分,所以我唯一的选择是尝试对夏令时检测进行逆向工程,并在适当的时候减去一个小时的偏移量。

由于日期和时间保持不变,一个明显的解决方案是只检查如果日期和时间是夏令时,那么从偏移量中减去一小时。对于大多数时间戳,这是可行的,但是在 DST 边界存在问题,因为例如,相同的时间戳可能会在 DST 生效当天的凌晨 1 点到凌晨 2 点出现两次。鉴于有关如何生成最终时间戳的信息,是否有任何方法可以用来消除 DST 边界处出现的部分或全部时间戳的歧义?

最佳答案

一些事情:

  • EST是时区缩写,不是时区。时区将由其 IANA/TZDB 标识符标识,例如 America/New_York

  • 一般来说,应避免使用时区缩写,因为:

    • 它们可能是模棱两可的。例如,CST 可以是美国中部标准时间 (UTC-6)、古巴标准时间 (UTC-5) 或中国标准时间 (UTC+8)。

    • 在世界的某些地方,它们与一个区域相关联,而不是与一个固定的偏移量相关联。例如,MSK 已经在俄罗斯莫斯科使用了很长时间。它目前表示 UTC+3,但在过去的几年中它表示 UTC+4。

    • 并非所有人都同意使用缩写词。例如,夏威夷有时被称为HST(夏威夷标准时间),有时被称为HAST(夏威夷-阿留申标准时间)

    • 并非世界上每个地方都使用英文缩写,甚至根本不使用其所在时区的缩写。尤其是当整个国家只有一个时区时。

  • 您在后端说过您将 EST 映射到 -05:00。这意味着您在某处定义了一个表映射时区缩写以进行偏移。您可能会发现该表非常固执己见,并且随着您的应用程序的维护而不断变化。我不建议这样做。

  • 您说您还确定由于 DST,您增加了一个小时。认识到 DST 在世界各地的执行方式不同。如果您所拥有的只是与 UTC 的偏移量,则无法可靠地确定 DST 是否生效。此外,地球上至少有一个地方(澳大利亚豪勋爵岛)的夏令时时间为 30 分钟,而不是一个小时。不要做任何假设。

  • 假设您指的是美国东部时区,在您指定的那一天,1994-11-05,东部时间是美国东部时间 (UTC-5)。所以你的例子是错误的,因为你不会在这个日期转到 UTC-4。如果这样做,您的缩写无论如何都会更改为 EDT - 而不是 EST

  • 您不能从偏移量返回到时区或时区缩写,因为偏移量的使用方式不明确。

    • UTC-5 可以是EST,也可以是ACTCDTCOTCSTEASSTECTPET

    • UTC-4 可以是EDT,也可以是AMTASTBOT , CDT, CLT, COST, ECT, FKT, GYT PYTVET

  • 即使您知道自己仅限于一个国家/地区,并且只有一个时差,但由于 DST 在某些地方的运作方式的性质,您也无法始终分辨出来自哪个时区。例如,美国的 2016-11-06T01:00:00-05:00 可能是 CDT (America/Chicago) ,或者可能是 EST (America/New_York)。两者同时生效。

请查看以下内容:

关于javascript - 如何猜测时间戳的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40899189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com