时区或位置与 UTC 的偏移量

Timezone or location to UTC offset

我需要可以将时区转换为 utc 偏移量的库。我有美国城市列表,我知道它们的区域(PST、EST ....)和位置。所以我的策略可以是

我知道图书馆 moment.js。但图书馆不支持所有美国城市的以下内容

    moment().tz("America/Los_Angeles").format();

我应该自己实现一些东西还是有一些其他的库或者我可以以其他方式使用 moment.js?

一些事情:

  • 您不能仅从缩写中获取时区或偏移量,因为存在歧义,例如 CST,可能是 -5、-6 或 +8,具体取决于您的解释方式它 ("Central Standard Time", "Cuba Standard Time", "China Standard Time").

  • 您也无法单独获取城市名称的时区或偏移量,因为在世界各地的不同位置有许多同名城市。例如,Paris 可能表示法国巴黎,也可能表示美国德克萨斯州巴黎,或 any of the other places called Paris。根据城市的不同,您还可能对不同的语言获得不同的城市拼写,例如乌克兰的首都在英语中拼写为 Kiev,在乌克兰语中拼写为 Kyiv

  • Moment支持IANA time zone identifiers的标准列表。它们不是世界上所有的城市,而是有时基于主要城市名称的特定字符串。有很多例外。

最终,解决这个问题的最佳方法是分两步:

  1. 将您的位置解析为近似的纬度和经度坐标。这称为 geocoding,并且有许多可用的 API 和数据库可以帮助您完成此操作。例如,Google Maps Geocoding API.

  2. 将坐标解析为 IANA 时区标识符。有很多方法可以做到这一点,包括 Google Maps Time Zone API, and many others listed in this answer。然后,您可以将此标识符与 Moment.js 和其他标识符一起使用。