tl;博士
-
始终使用ISO 8601 格式:
2019-11-14T00:55:31.820Z
- 避免使用 RFC 1123 和 822 的传统格式:
Thu, 14 Nov 2019 00:55:16 GMT
UTC 和 GMT 是计时,不是格式
UTC 和 GMT 不是格式。
UTC 和GMT 是两种略有不同的时间跟踪方式。这是一个复杂的话题,如果您真的想知道,请参阅 Wikipedia 页面了解详细信息。
对于常见的商业应用,没有显着差异,实际上不到一秒的差异。大多数程序员可以互换使用这些术语。如果您为 NASA 或 GPS/Galileo 导航项目工作,那么您会想了解更多信息。
ISO 8601
在您的第一个示例2019-11-14T00:55:31.820Z 中看到的格式是由ISO 8601 标准定义的。
- 中间的
T 将年-月-日部分与时-分-秒部分分开。
- 末尾的
Z 表示UTC,即零时分秒的UTC 偏移量。根据军事/航空传统,Z 发音为“Zulu”。
ISO 8601 标准更为现代。这些格式经过精心设计,易于机器解析,也易于跨文化的人类阅读。
在将日期时间值序列化为文本时始终选择 ISO 8601。
RFC 1123 / RFC 822
您的第二个示例字符串 Thu, 14 Nov 2019 00:55:16 GMT 在旧标准 RFC 1123 和 RFC 822 中定义。
这些是legacy 格式。它们很糟糕,很难被机器解析。而且它们对人类有害,因为它们采用英语和特定的文化规范。
尽可能避免使用这种格式。仅当需要尚未针对 ISO 8601 更新的旧协议和系统时才使用此选项。
时区
您的 2019-11-14T00:55:31.820Z 示例表示与 UTC 的偏移量为零时分秒。这是站在Royal Observatory Greenwich 显示的时钟前看到的时间和日期。
(photo source)
一小时后在突尼斯墙上挂着的时钟上看到的同一时刻:2019-11-14T01:55:31.820+01:00 [非洲/突尼斯]。正如+01:00 所指出的那样,当时突尼斯Africa/Tunis 的时区比UTC 早一小时。
与挂在魁北克墙上的时钟上看到的同一时刻显示前一个日期的晚上 8 点:2019-11-13T19:55:31.820-05:00[America/Montreal]。正如-05:00 所指出的那样,此时魁北克America/Montreal 的时区比世界标准时间晚五个小时。
您可以看到这些计算是使用运行 live at IdeOne.com 的 Java 代码(不是您的问题上标记的 JavaScript)进行的。
通常最好在 UTC 中完成大部分思考、业务逻辑、数据存储、数据交换和日志记录。仅在业务规则需要时以及向用户呈现值时才调整到时区。