纪元或 iso8601 日期格式?

Epoch or iso8601 date format?

为了在 JSON to/from 网络 API 中传递时间,为什么我会选择使用 ISO8601 字符串而不是简单地使用 UTC 纪元值?例如,这两个是相同的:

Epoch = 1511324473
iso8601 =   2017-11-22T04:21:13Z

epoch 值的长度明显更短,这对移动数据使用总是有利的,并且在 epoch 值和语言的本地 Date 类型变量之间转换非常简单。

我只是没有看到使用 ISO 字符串值的好处。

两者都明确且易于在程序中解析。你提到的纪元的好处是它更小,在你的程序中处理起来会更快。缺点是它对人类毫无意义。

iso8901 日期本身很容易阅读,不需要用户将数字转换为可识别的日期。与图像等大得多的东西相比,iso8601 中的大小增加并不明显。

就我个人而言,我会选择 API 的易读性而不是速度,因为它会在检查发送和接收的值时减少调试时间。在另一种情况下,例如在内部传递时间,您可能希望选择整数而不是文本的速度,这取决于您认为哪个更有用。

Unix/Epoch Time
+ 紧凑

+ 无需任何库即可轻松进行算术运算,即 var tomorrow=now()+60*60*24

- 不可读

- 无法表示 1970 年 1 月 1 日之前的日期

- 无法表示 2038 年 1 月 19 日之后的日期(如果使用 Int32)

- 时区和偏移量是“外部”信息,如果值为 UTC 或任何其他偏移量,则存在歧义。

- 官方规范仅支持秒。

- 当有人将值更改为毫秒以获得更好的分辨率时,该值是秒还是毫秒会出现歧义。

- 早于 ISO 8601 格式

- 表示自 1970 年以来的秒数(与即时时间相对)

- 秒精度

ISO 8601 Time
+ 人类可读

+ 代表时间的瞬间,而不是自 1970 年以来的秒数

+ 比 Unix 时间格式更新

+ 指定日期、时间、日期-时间、持续时间和间隔的表示!

+ 支持偏移表示

+ 纳秒精度

- 不太紧凑

- 对于任何算术操作,reach 库是必需的(如 java.time.OffsetDatetime)