【问题标题】:How to get current datetime of a specific timezone using the IANA timezone identifier?如何使用 IANA 时区标识符获取特定时区的当前日期时间?
【发布时间】:2020-05-27 12:56:38
【问题描述】:

我目前正在开发一个应用程序,该应用程序(除其他外)应使用 IANA 时区标识符作为输入来显示特定时区的当前 datetime。我遇到了Luxon library,并尝试通过以下方式使用它:

DateTime.local().setZone(*IANA_identifier*)

但是,除了以Etc/GMT.. 开头的时区之外,我还收到null 作为输出(例如'America/New_York')。因此,无论我在使用 Luxon 的方式上做错了什么,还是无法使用这个库来实现它。

有人可以告诉我如何调整我的代码以使其与 luxon 库一起使用,或者将我指向一个能够使用 IANA 时区标识符作为输入返回当前 datetime 的库吗?

【问题讨论】:

  • 这是一个实际的时区吗?也许有一个数组可以在另一端转换为您想要的?
  • @GetSet 请看here
  • 再一次,javascript 似乎不会向前兼容到任何这样的新标准。你能定义一个数组吗?
  • @GetSet 我刚刚找到了一种方法(见我的回答)
  • 如果这能解决您的用例问题,那么您一切都好。

标签: javascript datetime timezone momentjs luxon


【解决方案1】:

我找到了一种方法。 moment-timezone 库可以通过以下方式使用:

moment().tz('America/New_York').format() //2020-02-11T22:01:09-05:00

【讨论】:

  • DateTime.local().setZone('America/New_York').toISO() 在我看来效果很好:2020-02-11T22:22:46.210-05:00。我使用了browser setup 和var DateTime = luxon.DateTime;。 Luxon 比 moment.js 大,但要做到这一点,还必须安装时区库和数据。我认为 Luxon 应该是 moment.js 更好的技术替代品。
  • 不加.toISO()会怎样?
  • @RobG 我刚刚发现 Luxon 有时不支持 IANA 时区,对我来说就是这种情况。 See here
  • 啊,好的。顺便说一句,IANA 使用与时区不同的“代表性位置”,例如“America/New_York”,尽管每个人都称它们为“IANA 时区”。原因是每个时区涵盖许多不同的行政区域,这些区域可能(并且经常)具有不同的历史偏移量,特别是在夏令时方面。 “setZone”方法最好命名为“setOffsetRules”或“setRepresentativeLoc”。 ;-)
猜你喜欢
  • 2021-01-20
  • 2019-10-01
  • 2016-03-12
  • 2017-09-18
  • 2016-09-27
  • 2014-06-23
  • 2012-03-23
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多