我知道我无法纯粹从时区偏移量获取时区,正如此处时区标签的 wiki 页面中所述。
如果我也有日期时间怎么办?这会将范围缩小到我不必担心夏令时的范围。
我不是在寻找地点。只是时区。我认为这个问题是相关的,因为我在网上找到的所有内容都清楚地表明您无法从偏移量获取时区,但没有任何内容明确表明您无法从偏移量+日期时间获取时区。
如果我也有日期时间怎么办?
不,它仍然没有给你足够的信息。
两个时区完全有可能在同一时刻现在拥有相同的当地时间,但一分钟后就会出现分歧。仅知道日期/时间和偏移量并不能为您提供时区 - 至少一般情况下不会。在许多情况下,它可能 - 对于任何给定情况,您可以查看所有时区并检查其中有多少时区在该时刻具有 UTC 偏移量...但您绝对应该预料到会出现这种情况答案是“多个时区匹配”。 作为一个具体示例,请考虑 2022-05-16T17:33:00+01:00。这匹配非洲/卡萨布兰卡和欧洲/伦敦
至少- 但这些绝对是非常不同的时区,具有不同的规则。
timeOffset。 没有什么可以保证时间偏移始终相同。各国使用夏令时或可能因任何特定原因决定取消夏令时。
在浏览器世界中,Date 和 Intl 类中有一些工具可以帮助您重建/提取该信息。
获取时区的最佳方法是询问用户。否则,还有一些方法,例如检查浏览器的时区(不适用于 Firefox)或使用地理定位 API。
使用浏览器的时区(Firefox 除外,时间为 1 月 24 日)
Intl.DateTimeFormat().resolvedOptions().timeZone)
在浏览器中使用地理位置,然后使用库获取时区:
navigator.geolocation.getCurrentPosition(console.log)
使用已知时区重新创建日期:
console.log(
new Intl.DateTimeFormat('en-GB', {
dateStyle: 'full',
timeStyle: 'long',
timeZone: 'Australia/Sydney',
}).format(date),
);
TLDR;简短的回答
无论如何,只有当用户位于另一个位置时需要显示原始位置的时间戳时,了解时区才会有帮助。