ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ISO-8601 如何解读

2021-08-14 03:31:10  阅读:313  来源: 互联网

标签:00 8601 1970 解读 Unix 时间 格式 ISO 纪元


ISO-8601 是国际标准化组织提供的一个有关时间表示的规范。

如下:
1970-01-01T00:00:00Z 可能是我们最常看到的格式了,这个表示的是一个 Epoch 时间,其实也不完全一定是,因为在上面没有表示出毫秒。

关于上面的时间格式解读如下:

  • T 为日期和时间的分隔符,无特殊意义,猜测可能使用了英文单词 time 的首字母 T 吧。
  • Z 表示的是时区。应该取的是 Zone 的首字母,如果你看见表示的格式有 Z 的话,那么就说明当前的时间是 UTC 时间。

格式扩展

完整的 ISO 8601 可以用下面的格式来表示 2021-08-13T14:20:18.992847200-04:00

在上面的格式中的 字母 T 请参考前面的解释。

  • 无字母 Z,如果没有字母 Z的话,应该使用的是 + 或者 - 符号,+ 表示的是东,比如说北京, - 表示的是 西部,比如 -04:00 表示的是西 5 区的美国东部时间。
  • 在秒后面使用 点号 . 例如 上面的 .992847200 来表示纳秒,这个时间是可以省略的。

其实上面的时间格式都是可以进行格式化,取部分数据,或者省略掉数据,如果省略的数据在初始化的时候就被填充 0 。

Epoch 时间

纪元(Epoch)是指具有历史意义的某一刻,其实就是一个参考点。

 

epochconverter-og-img

 

Unix 纪元是 Unix 或类 Unix 系统,一些C/C++,Java等编程语言使用的纪元,从1970年一月一日00:00 开始。而其他的操作系统或者编程语言,使用的就是不一样的纪元起始日期了,比如 Microsoft C/C++ 7.0 使用的是 1899年12月31日。

从 Unix 纪元(1970-01-01-00:00:00)就是Unix时间的零点,以后的时间是正的,而 Unix 纪元之前的时间就是负值。

为什么 Unix 系统中纪元的时间是 1970 年

这个问题得去问 Unix 之父:Ken Thompson 和 Dennis Ritchie了,是他们选择这个时间作为 Unix 系统的纪元时间的。

第一版的 Unix 程序员手册是 1971年11月份出版的,上面定义Unix时间是:从1971年1月1日00:00:00开始,单位是一秒的六十分之一。

这意味在Unix时间的最早版本中,时间计数器以 60Hz 的频率(芯片的振荡器频率)递增,每隔 1/60 秒,计数器就加一。当时使用的整数计数器是 32 位的,这样 Unix 时间能够表示的范围就非常受限了,2^32/60/3600/24/30/12 大约是 2.3年。

所以后来经过多次更改,频率变成了1Hz,纪元时间改为了 1970年1月1日00:00:00。

有一种说法是Unix 操作系统诞生于 1970 年,但实际上并不是的,在 1969 年左右,Unix的概念就已经诞生了,Unix 的最早版本已经诞生了。Wired 网站上的一篇文章写道:Ritchie 说这个时间其实是随意选择的,因为需要一个统一的日期来作为时间的起点,而1970年的元旦,看起来是最方便的。

2038 年问题

2038 年问题又叫 Unix 千年臭虫或 Y2K38 错误。在时间值以带符号的 32 位整数来存储或计算的数据存储情况下,这个错误就有可能引发问题。

可以用 Unix 带符号的 32 位整数时间格式来表示的最新时间是 2038年1月19日03:14:07UTC,这是1970年1月1日之后过了2147483647秒。过了那个时间后,由于整数溢出,时间值将作为负数来存储,系统会将日期读为1901年12月13日,而不是2038年1月19日。

2021-08-13_14-58-04

用简单的语言来说,Unix机器最终将会耗尽存储空间来列举秒数。所以,到那一天,使用标准时间库的C 程序会开始出现日期问题。

其实就是因为整数的最大计数在这一天会溢出,导致无法正确处理时间。

感觉人类文明就是和时间和存储过不去。

 

https://www.ossez.com/t/iso-8601/13687

标签:00,8601,1970,解读,Unix,时间,格式,ISO,纪元
来源: https://www.cnblogs.com/huyuchengus/p/15139738.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有