有什么办法可以使用时间戳获取TimeZone值

时间:2020-03-21 16:30:08

标签: time timezone momentjs angular-moment moment-timezone

这是我所拥有的价值,

Sun Mar 29 2020 02:55:00 GMT+0530

例如,我想得到

亚洲/加尔各答

作为输出。预先感谢。

1 个答案:

答案 0 :(得分:3)

偏移量不表示区域

使用时间戳获取TimeZone值

不。

您无法根据偏移量确定时区。

许多时区可以共享相同的UTC偏移量(本初子午线之前或之后的小时-分钟-秒数)。

请参阅Wikipedia中的list of time zone names。单击列标题以按偏移量排序。请注意,多个区域共享同一偏移量的频率。

以您的示例为例,请注意,我们当前有两个区域同时重合UTC五个半小时:

  • Asia/Kolkata(印度)
  • Asia/Colombo(斯里兰卡)

因此,没有进一步的输入,就无法知道您输入的字符串的作者是印度时间还是斯里兰卡时间。

顺便说一句,名称Asia/Calcutta已更改为Asia/Kolkata。如果您的系统没有这样的名称,则您的 tzdata 已经过时了几年。在操作系统,数据库服务器(如Postgres)和运行时(如Java)中,始终保持tzdata的所有副本为最新。

另一个复杂之处:政客经常更改其辖区中使用的补偿。

因此,尽管今天所有印度都使用+05:30的相同偏移量,但情况并非总是如此,将来也不总是如此(基于区域周围区域变化频率的历史记录)世界)。

ISO 8601

ISO 8601标准定义了许多明智的格式,用于将日期时间值表示为文本。

2020-01-23T12:34:56.123456789+05:30

Java 8和更高版本中内置的 java.time 框架通过将时区的名称附加在方括号中来明智地扩展了其中一种格式。如果可行,我建议使用这种格式。

2020-01-23T12:34:56.123456789+05:30[Asia/Kolkata]