【问题标题】:Get UTC offset from timezone abbreviations从时区缩写中获取 UTC 偏移量
【发布时间】:2020-02-10 09:01:23
【问题描述】:

是否有从时区缩写中获取 utc 偏移量的方法?如:

“太平洋标准时间”

太平洋标准时间(北美)

这将导致 UTC-08。我在时刻时区找到了一种方法,但没有太大帮助。 它提供了时区标识符列表,但其中大多数已被弃用。 谢谢。

【问题讨论】:

  • 您能否详细说明您在使用 moment-timezone 时发现了什么以及它是如何没有帮助的?
  • 正如我所说,它提供了一个标识符列表,但其中大多数已被弃用。
  • 我认为当我向最终用户显示列表以选择他们的时区时,它并没有多大帮助
  • 如果目标是让用户选择他们的时区,那么您首先不应该使用时区缩写。您应该使用像“欧洲/伦敦”这样的时区。因为这些时区在一年中的不同时间在“缩写时区”之间切换。
  • moment 会自动更改吗?正常和夏令时之间

标签: javascript node.js momentjs


【解决方案1】:

这是一个相当棘手的话题,类似的问题已经讨论过。

Detect timezone abbreviation using JavaScriptGet timezone abbreviation using offset value

我会提出两种选择:

1.哈希表。根据标准信息(例如时区缩写及其偏移量列表)创建您需要的键值对。类似的东西

    let offsetByAbbrev = {"PST" : "UTC-08", "EST" : "UTC+01", ... }

但这需要认真维护,因为它很快就会被弃用。

2。日期操作。您可以使用 momentjs 在特定时区创建日期,但是不能使用缩写。这有一个很好的理由:这些缩写可以改变,也可以导致歧义。您可以查看 momentjs-timezone 使用的 JSON:https://github.com/moment/moment-timezone/blob/develop/data/packed/latest.json,这将使您大致了解它的混乱程度。例如,对 PST 进行简单的 ctrl+f 搜索并查看结果。

所以我建议使用时区名称 - 您可以实际创建并使用 momentjs-timezone。请参阅How to create time in a specific time zone with moment.js,您可以在其中根据时区名称创建一个时刻对象,该对象将包含(根据时刻时区的规范:https://momentjs.com/timezone/docs/#/zone-object/)偏移量本身。

我知道这并不能完全解决您的问题,尽管您尝试做的不一定是达到理想解决方案的最佳方法。

【讨论】:

  • 感谢您的解释。我知道现在该做什么了。
猜你喜欢
  • 2013-10-15
  • 2020-10-21
  • 2016-05-07
  • 2017-02-20
  • 1970-01-01
  • 2011-07-29
  • 2014-01-09
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多