我可以根据偏移量和日期时间推断时区吗?

问题描述 投票:0回答:2

我知道我无法纯粹从时区偏移量获取时区,正如此处时区标签的 wiki 页面中所述。

如果我也有日期时间怎么办?这会将范围缩小到我不必担心夏令时的范围。

我不是在寻找地点。只是时区。我认为这个问题是相关的,因为我在网上找到的所有内容都清楚地表明您无法从偏移量获取时区,但没有任何内容明确表明您无法从偏移量+日期时间获取时区。

timezone offset
2个回答
4
投票

如果我也有日期时间怎么办?

不,它仍然没有给你足够的信息。

两个时区完全有可能在同一时刻现在拥有相同的当地时间,但一分钟后就会出现分歧。仅知道日期/时间和偏移量并不能为您提供时区 - 至少一般情况下不会。在许多情况下,它可能 - 对于任何给定情况,您可以查看所有时区并检查其中有多少时区在该时刻具有 UTC 偏移量...但您绝对应该预料到会出现这种情况答案是“多个时区匹配”。 作为一个具体示例,请考虑 2022-05-16T17:33:00+01:00。这匹配非洲/卡萨布兰卡和欧洲/伦敦

至少

- 但这些绝对是非常不同的时区,具有不同的规则。


0
投票

时间戳中包含时区只是一个指示符,可以帮助了解事件具体发生的时间。您在时间戳中获得的时间是该时刻在该位置的时间,以及当时的

timeOffset。 没有什么可以保证时间偏移始终相同。各国使用夏令时或可能因任何特定原因决定取消夏令时。

在浏览器世界中,Date 和 Intl 类中有一些工具可以帮助您重建/提取该信息。

获取时区的最佳方法是询问用户。否则,还有一些方法,例如检查浏览器的时区(不适用于 Firefox)或使用地理定位 API。

使用浏览器的时区(Firefox 除外,时间为 1 月 24 日)

Intl.DateTimeFormat().resolvedOptions().timeZone)

在浏览器中使用地理位置,然后使用库获取时区:

navigator.geolocation.getCurrentPosition(console.log)

使用已知时区重新创建日期:

再次假设我们正在浏览器世界中进行讨论,如果您想显示时区与用户浏览器位置不同的时间戳,您可以使用 Intl 类来实现。问题是,要使用它,您必须知道时区。

console.log( new Intl.DateTimeFormat('en-GB', { dateStyle: 'full', timeStyle: 'long', timeZone: 'Australia/Sydney', }).format(date), );

TLDR;简短的回答

不,这还不够。您需要通过询问用户、从浏览器获取或获取地理位置坐标来了解它,并将其映射到正确的时区。

无论如何,只有当用户位于另一个位置时需要显示原始位置的时间戳时,了解时区才会有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.