UTC 与 ISO 时间格式

tmp*_*dev 16 javascript time iso utc iso8601

我试图了解 UTC 和 ISO 格式之间的区别以及在服务器之间传输消息时何时使用什么。所以当我尝试以下这就是我得到的

new Date().toISOString()
"2019-11-14T00:55:31.820Z"

new Date().toUTCString()
"Thu, 14 Nov 2019 00:55:16 GMT"
Run Code Online (Sandbox Code Playgroud)

我了解 ISO 格式及其用于表示时间的标准,但 UTC 的目的是什么,我将在哪里使用它们?

Bas*_*que 47

tl;博士

  • 始终使用ISO 8601格式:2019-11-14T00:55:31.820Z
  • 避免使用RFC 1123 和 822的旧格式Thu, 14 Nov 2019 00:55:16 GMT

UTC 和 GMT 是计时,而不是格式

UTC 和 GMT 不是格式。

UTCGMT是两种略有不同的时间跟踪方式。这是一个复杂的主题,因此如果您真的想知道,请参阅维基百科页面以了解详细信息。

对于普通的商业应用,没有显着差异,字面上的差异不到一秒。大多数程序员可以互换使用这些术语。如果您为 NASA 或 GPS/Galileo 导航项目工作,那么您会想要了解更多信息。

ISO 8601

您在第一个示例中看到的格式2019-11-14T00:55:31.820ZISO 8601标准定义。

  • T中间分隔开来时,分,第二部分年-月-日部分。
  • Z对端装置UTC,即,偏移从-UTC零小时-分钟-秒。根据Z军事/航空传统发音为“祖鲁语”。

ISO 8601 标准更加现代。这些格式经过精心设计,易于机器解析,也易于跨文化的人类阅读。

将日期时间值序列化为文本时,始终选择 ISO 8601

RFC 1123 / RFC 822

您的第二个示例字符串Thu, 14 Nov 2019 00:55:16 GMT在旧标准RFC 1123 & RFC 822 中定义

这些是格式。它们很糟糕,很难被机器解析。而且它们对人类有害,因为它们假定英语语言和特定的文化规范。

尽可能避免这种格式。仅在尚未针对 ISO 8601 更新的旧协议和系统需要时才使用此选项。

时区

您的示例2019-11-14T00:55:31.820Z意味着与 UTC 零时分秒的偏移量。这是站在格林威治皇家天文台时钟前看到的时间和日期。

在此处输入图片说明

图片来源

一个小时后,挂在突尼斯墙上的时钟上看到的同一时刻显示:2019-11-14T01:55:31.820+01:00[非洲/突尼斯]。突尼斯的时区Africa/Tunis是一个小时提前在那一刻UTC的,正如指出的+01:00

挂在魁北克墙上的时钟上看到的同一时刻显示前一天晚上 8 点左右:2019-11-13T19:55:31.820-05:00[美国/蒙特利尔]。魁北克省的时区America/Montreal5个小时的背后在那一刻UTC,正如指出的-05:00

您可以看到这些计算是使用在 IdeOne.com实时运行的 Java 代码(不是您的问题中标记的 JavaScript)进行的

一般最好在UTC中做大部分的思考、业务逻辑、数据存储、数据交换和登录。仅在业务规则需要时以及向用户呈现值时调整到时区。

  • @tmpdev 你知道格式与文本、字符串有关吗?“ISO”和“UTC”不是格式。“2019-11-14T00:55:31.820Z”末尾的“Z”表示在本初子午线上盯着伦敦格林威治皇家天文台外的官方时钟时午夜后五十五分钟的时间(以及也是冰岛所有使用 UTC 作为时区的时钟上看到的时间)。如果没有“Z”,我们就无法知道这是否意味着日本东京的凌晨 1 点、法国巴黎的凌晨 1 点或美国俄亥俄州托莱多的凌晨 1 点——这是非常不同的时刻,相隔几个小时。 (2认同)