我们是不是也曾见到过或者听说过1970-01-01,而且它好像常常存在于计算机行业,非常常见,从事IT行业的兄弟应该都接触过,那么到底为什么是1970-01-01,而不是其他呢?

其实,1970-01-01对于开发者来说都是不陌生的,有些系统对于时间的处理如果不够好的话,就可能把时间显示成1970-01-01,所以经常有用户看到1970-01-01这个时间。
不信的话我们可以使用java代码验证:

Date date = new Date(0);
System.out.println(date);

结果如下:

Thu Jan 01 08:00:00 CST 1970

通过Date的构造函数的Java Doc说明:

该构造函数接收用户指定一个毫秒数,如new Date(1000),表示获得一个距离"epoch"有1000毫秒的时间。在Java中,这个时间是1970, 00:00:00 GMT。

起源
时间戳

一切要从Unix操作系统诞生开始说起。

1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。

随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了Unix,新版于1971年发布。
在Unix被发明出来之后,需要在Unix上表示时间,就需要想办法定义一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据来表示时间。

于是,Unix时间戳被定义出来,即通过当前时间和一个"纪元时间"进行对比,其间相差的秒数作为时间戳。

为了让Unix时间戳表示时间这种方式用的尽可能久,最初就把Unix诞生的时间1971-1-1定义成"纪元时间"。

时间戳修改

除了开始时间是1971-1-1而不是1970-1-1外,最初的时间戳也不是每增加1秒时间戳就变动一次,而是每1/60秒都会改变一次时间戳。

另外,Unix是在1971年发明出来的,当时的计算机系统是32位,如果用32表示有整数,那么最大值是2147483647(2^31-1)。

那么,简单做一个数学计算,如果用当时的时间戳计算方式来表示时间的话,Unix时间戳最多可以使用4294967296/(606024)/60 = 828.5天(一天有606024秒,每1/60秒会占用一个时间戳)。

想象一下,设计出一个计算机系统,他的时间只能表示 828.5天,是不是很难让人接受,但是最初的Unix确实是这样的。

后来,Unix的开发者们也渐渐意识到这样不是长久之计,于是开始做出改变。

最开始,他们将每1/60秒改变一次时间戳修改成每1秒改变一次时间戳。这样时间戳可以表示的时间就又放大了60倍。这时候有828.5*60/365 = 136年。

这时候,一方面136年已经足够久了,纪元时间稍微向前调一下影响也不大。另外一方面为了方便记忆和使用。

于是就把纪元时间从1971-01-01调整到1970-01-01了。

1970-01-01是什么?为什么计算机起始时间是1970年1月1日相关推荐

  1. 为什么计算机起始时间是1970年1月1日

    1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本.随后,汤普逊和同事丹尼斯 ...

  2. 漫话:为什么计算机起始时间是1970年1月1日?

    这是我的第 203 期分享 作者 | 漫画编程 来源 | 漫画编程(ID:mhcoding) 分享 | Java中文社群(ID:javacn666) 问题复现 1970-01-01对于开发者来说都是不 ...

  3. 漫画:为什么计算机起始时间是 1970 年 1 月 1 日?

    作者 | 漫话编程 来源 | 漫话编程(ID:mhcoding) 问题复现 1970-01-01对于开发者来说都是不陌生的,有些系统对于时间的处理如果不够好的话,就可能把时间显示成1970-01-01 ...

  4. 计算机起始时间1970

    为什么计算机起始时间是1970年 1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的 ...

  5. 为什么计算机起始时间、为什么Java时间戳、是1970年1月1日?

    为什么计算机起始时间.为什么Java时间戳.是1970年1月1日? 相信这个问题让很多学习编程的人都感到疑惑,我也是,查询了很多,发现这篇帖子讲的通俗易懂,简单明了. [为什么计算机起始时间是1970 ...

  6. 时间:2014年3月27日20:08:01网站建表实战与优化意识

    建表: SNS社交网站: 会员表:member Mysql中没有布尔型,相当于tinyint类型 false 就是0 其他都是true 大小 字节 列名称 列类型 默认值 是否主键 4 编号id in ...

  7. 2017广东全国计算机12月,2018年广东考研时间:2017年12月23日至24日

    2018年考研时间已经公布,出国留学考研网为大家提供2018年广东考研时间:2017年12月23日至24日,更多考研资讯请关注我们网站的更新! 2018年广东考研时间:2017年12月23日至24日 ...

  8. 2021年江苏一级计算机报名时间,江苏2021年3月计算机一级报名时间安排

    摘要: 江苏2021年3月计算机一级报名时间安排为你介绍2020年3月江苏全国计算机一级考试报名时间已经公布.以下是小编为大家整理的2020年3月江苏计算机一级考试报名时间相关内容,希望对大家有所参考 ...

  9. 四川计算机二级时间安排,2020年3月四川计算机二级考试时间

    2020年3月四川全国计算机二级考试时间已经公布.下面小编就带着大家一起看一下吧,感兴趣的同学们要多多参考哦!希望可以给大家带来帮助. 2020年3月四川计算机二级考试时间 2020年3月四川计算机二 ...

最新文章

  1. Linux如何查看当前目录下文件的个数
  2. oracle pl sql注意问题,Oracle PL/SQL编写PL/SQL代码的注意事项
  3. 腾讯AI单挑碾压王者荣耀职业玩家:人类15场只能赢1局,坚持不到8分钟 | “绝悟”技术细节披露...
  4. 详解OS X和iOS图像处理框架Core Image
  5. 基于matlab/simulink的双闭环PMSM控制
  6. 男人是大猪蹄子的证据找到了!
  7. honeyselect捏脸教程_动漫女生的脸怎么画?卡通漫画少女教学
  8. plsql连接mysql_安装了mysql和pl/sql,怎么配置让pl/sql能联接mysql数据库
  9. 前端:CSS/13/HTML引入CSS的方法,CSS表格属性,盒子模型,上下外边距合并
  10. 多闪实名举报河南法院;ofo 内部发反腐文件;库克访华点赞故宫 App | 极客头条...
  11. mysql为用户部分授权,MYSQL为用户授权
  12. 【Django 2021年最新版教程25】模板语言 前端for循环怎么用 实例
  13. 如何清除项目 git 版本控制信息
  14. 项目实战--Ego微商小程序
  15. 视频直播技术详解之延迟优化
  16. 静态HTML旅行主题网页设计与实现——联途旅游网服务平台网(39页)html css javascript
  17. 堆中存什么?栈中存什么?
  18. SSM出租车查询系统 毕业设计-附源码220915
  19. LabVIEW创建Web服务
  20. MySQL数据库文件

热门文章

  1. malloc函数分配内存失败的原因及解决方法
  2. 数字化原住民|ONES 人物
  3. 电脑有网却打不开网页(能ping通)
  4. PVE 下解决 iKuai 断流、重启问题
  5. 英语写作中的一些缩写
  6. 基于LabVIEW的二维码识别程序
  7. java核心技术读书笔记—继承
  8. 朝九晚五的程序员如何提高开发技能
  9. 当代年轻人下班行为报告:我下班了,却又没完全下班
  10. 航城街道工商联(商会)领导一行莅临联诚发参观考察