纪元或 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)
为了在 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)