首页 > 解决方案 > “Z”之前的值在 ISO8601 日期字符串中表示什么?

问题描述

我正在尝试了解ISO8601 时间格式

这个值是什么意思?

2019-11-14T00:55:31.820Z

我是这样理解的

2019-11-14 // November 14th, 2019 
T00:55:31  // 12:55 AM  in GMT time (London)
.820       // why is this needed or specified?
Z          // The "Z" indicates to store this as GMT time (London)

我不明白为什么.820这里需要。读到它,这是指时区820,即加利福尼亚。

如果我去 Javascript 控制台并在有和没有那个 820 值的情况下编写这个,我会得到相同的结果,基于我的语言环境(EST 时区)

new Date('2019-11-14T00:55:31.820Z') // Wed Nov 13 2019 19:55:31 GMT-0500 (Eastern Standard Time)
new Date('2019-11-14T00:55:31Z')     // Wed Nov 13 2019 19:55:31 GMT-0500 (Eastern Standard Time)

实际作用之前的前缀值Z是什么?

标签: javascriptdatetimezoneiso8601

解决方案


“Z”表示将此存储为 GMT 时间(伦敦)

不,它表示显示的时间值UTC,而不是你应该将它存储在 GMT/UTC 中。它告诉您解释所提供信息的时区。

我不明白为什么这里需要 .820。读到它,这是指时区 820,即加利福尼亚。

那是毫秒,而不是时区。进入 820 毫秒00:55:31(例如,距离 180毫秒00:55:32)。

如果我去 Javascript 控制台并在有和没有那个 820 值的情况下编写这个,我会得到相同的结果,基于我的语言环境(EST 时区)

只是因为您引用的任何控制台的输出都不包括毫秒。如果您检查实际日期,您会发现它们相隔 820 毫秒:

const dt1 = new Date('2019-11-14T00:55:31.820Z');
const dt2 = new Date('2019-11-14T00:55:31Z');

console.log(dt1.valueOf() - dt2.valueOf()); // 820

(实例的基本值Date是自 1970 年 1 月 1 日午夜 UTC 以来它所代表的毫秒数。因此,如果我们从 [which does] 中减去d2[which doesn't have the .820] d1,我们会看到它们相隔 820ms。)


推荐阅读