zoukankan      html  css  js  c++  java
  • 为什么编程语言以及数据库要从1970年1月1日开始计算时间

    这是一个有趣又容易被忽略的问题。

    上网查了一下,linux编程中对时间的计算是相对1970.1.1 00:00:00 的,为什么是这个时间呢

    答案是:计算机位数的限制。

    我们知道最初计算机操作系统是32bit,时间也是用32bit来表示,

    也即2^32 = 4294967296(考虑符号位并去掉0,最大值为4294967296/2-1 = 2147483647),这是整数的最大值。

    1年总的秒数为365*24*3600 = 31536000

    2147483647/31536000 = 68.1 year

    也就是说32位能表示的最长时间是68年,那么为了当下编程的考量及照顾未来可能的发展(64bit)

    于是,选择1970年作为epoch起点,那么到2038年01月19日03时14分07秒,便会到达最大时间

    过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000也就是1901年12月13日20时45分52秒

    这样便会出现时间回归的现象,很多软件便会运行异常了。

    可以预见的是,到了2038年那个时间点,很多遗留的老程序会出现问题,千年虫也许是虚惊一场,但是2038肯定是不会这么消停。

  • 相关阅读:
    C++ STL中vector应用
    cocos2dx绘制直线
    [ios] 获得ios设备具体型号
    如何制作 iTunesArtwork
    Ios AppIcon 去掉默认半弧形白色遮罩
    App运行内存打印
    C++ 文件操作
    objc 笔记
    (转)c++ oc字符操作
    cocos2dx 文本 优化
  • 原文地址:https://www.cnblogs.com/zhaogang99/p/9233043.html
Copyright © 2011-2022 走看看