在将时间数据传输到/从Web API时,为什么我会选择使用ISO8601字符串而不是UTC纪元值?例如,以下两个值相同:
Epoch = 1511324473
iso8601 = 2017-11-22T04:21:13Z
时代值长度显然较短,对于移动数据使用来说总是有益的,并且将时代值和语言的本地日期类型变量相互转换也很简单。
我只是看不到使用ISO字符串值的好处。
两种日期格式都很明确且易于程序解析。像您提到的时间戳一样,它的好处在于它更小,能够更快地在程序中处理。缺点是对人类来说毫无意义。
ISO8901日期格式本身易于阅读,不需要用户将数字转换为可识别的日期。与诸如图像之类的大得多的东西相比,ISO8601格式所需的空间增加是微不足道的。
个人而言,在API中,我会选择易于阅读而非速度,因为这样可以减少调试时检查发送和接收值的时间。在另一种情况下,例如在内部传递时间时,您可能希望选择整数的速度而不是文本,因此取决于哪种方法对您更有用。
Unix/Epoch Time
+紧凑
+可以进行算术运算而无需任何库,例如var tomorrow=now()+60*60*24
-不可读
-不能表示1970年1月1日之前的日期
-如果使用Int32,不能表示2038年1月19日之后的日期
-时区和偏移量是“外部”信息,如果该值是UTC或任何其他偏移量,则存在模糊性。
-官方规范仅支持秒。
-当有人将值更改为毫秒以获得更好的分辨率时,存在该值是秒还是毫秒的歧义。
-早于ISO 8601格式
-表示自1970年以来的秒数(与时间点相反)
-精度为秒
ISO 8601 时间格式
+易于阅读
+表示时间点,而不是自1970年以来的秒数
+比Unix时间格式更新
+指定了日期、时间、日期时间、持续时间和间隔的表示方式!
+支持一个偏移量的表示
+精度为纳秒
-不够紧凑
-需要使用丰富的库进行任何算数操作(如java.time.OffsetDatetime)