为何计算机等电子设备要用1970年1月1日作参考时间

          在java中用过System类下的 CurrentTimeMillis()或Date类的相关的时间、日期的方法函数的同学都知道,我们常要与1970年1月1日零时的时间做差值计算。很多同学或许做过,但是或许有一部分不知道为什么是这样的,计算机工程师、物理科学家们可是相当聪明的人,他们为何要这么做呢?接下来,我就简要谈一谈?

      1970.1.1是个神马特殊的日子?为什么要给这个奇葩如此“殊荣”?原来,1970.1.1是被看作计算机的元年,最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),而java、数据库、许多精密的仪器等也自然也遵循了这一约束。

       看完上面一段,或许就明白了,但是我觉得还是有必要多了解有一些相关小知识,“技多不压身”。通常,国际上也有不少计时都是采用的GMT,全称是GreenWich Mean Time,,现在一些电子设备时间的计算和显示是以距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量为标准的,如1970-1-10 20:47 偏移量为2724441632毫秒,出现类似字样说明时间被初始化了。 但是我们在API文档里看到的是与UTC(Universal Time Coordinated)时间相关,

       -----UTC,协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治平时。中国大陆采用ISO 8601:2000的国家标准GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》中亦称之为协调世界时。台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO 8601类似)称之为世界协调时间。(参考维基百科)

        诚然UTC是一种更为科学的计时标准,在今天相对论、量子学、弦论等高大上的日益发展、完善,时间的精确度越来越苛刻,或许,在不久的将来XXX计时标准又会出现。 然而,对于普通民众来说,GMT、UTC的差别可以几近忽略,因为,协调世界时UTC与世界时GMT相差不会超过0.9秒,当大于此值时,位于巴黎的国际地球自转事务中央局负责决定何时加入闰秒。

         还有一个有意思的类似 千年虫Y2K BUG的问题,公历的UTC时间2038年1月19日3时14分7秒. 到这天的凌晨3时14分8秒, UNIX时间会溢出并变成10000000 00000000 00000000 00000000(十进值-214748368), 也就是UTC时间1901年12月13日20时45分52秒, 引起和千年虫类似的混乱.可是,也不必担心,因为,这描述的是使用32位操作系统的仪器将要出现的BUG,现在64位电脑操作系统已经很普遍,手机也出现了首款64位的操作系统(5s上运行的即是), 要等64位的出现这样溢出的BUG,那得等到292,277,026,596年12月4日15时30分08秒,那时的事情我就不去想了,想了也是在自己跟自己瞎扯淡。

      文献参考:

               1)为什么编程语言以及数据库要从1970年1月1日开始计算时_无情无绪_新浪博客 http://blog.sina.com.cn/s/blog_61352f210100geai.html

               2)Java API文档,System、Date类相关资料

               3)为什么计算机和一些电子产品的时间选择在1970.1.1 - NEVER - 博客频道 - CSDN.NET http://blog.csdn.net/jacqueslim/article/details/6909861此文被很多很多博主转载,被“原创”,写的很好,也找不到真实的原创了)

               4)Wikipedia(维基百科)

               5)百度百科

猜你喜欢

转载自winfred1206.iteye.com/blog/2037787