计算机中时间的表示和存储

为什么计算机的计时是从1970年1月1日00:00:00开始的呢?

       以前的Unix计算机中存储时间,是以32位来存储的。因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),将1970年作为中间点,向左向右偏移都可以照顾到更早或者更后的时间,因此将1970年1月1日0点作为计算机表示时间的原点,从1970年1月1日开始经过的秒数存储为一个32位整数。以后计算时间就把这个时间(1970年1月1日00:00:00)当做时间的零点。这种高效简洁的时间表示法,就被称为"Unix时间纪元"。

 

 

为什么现在的计算机的时间是以64位来存储时间的?

    因为32位的UNIX系统会以32位二进制数字表示时间,它们最多只能表示至协调世界时间2038年1月19日3时14分07秒(二进制:01111111 11111111 11111111 11111111),在下一秒二进制数字会是10000000 00000000 00000000 00000000,这是负数,因此各系统会把时间误解作1901年12月13日20时45分52秒(亦有说回归到1970年)。这时可能会令软件发生问题,导致系统瘫痪。这是著名的Unix 2038 bug(Jason hatchet bug)。

    后来的解决方案就是,计算机表示时间使用了64位来代替32位。在64位系统下,此时间最多可以表示到292,277,026,596年12月4日15时30分08秒。这个时间就可以非常长了,在目前的人类生活时间中,远远够用了。

你可能感兴趣的:(计算机中时间的表示和存储)