Date date = new Date(0);
System.out.println(date);
打印出来的结果:
Thu Jan 01 08:00:00 CST 1970

也是1970 年 1 月 1 日,实际上时分秒是 0 点 0 分 0 秒 ( 这里打印出来是 8 点,稍后会作解释 ) 。
为什么这个时间会定义在1970 年 1 月 1 日这个时候呢 ?
于是开始了Google ,中文网页根本找不到答案。 于是试着搜索英文关键字 , 在 Sun java 论坛总算找到准确的帖子 :
http://forums.sun.com/thread.jspa?threadID=595140&start=15

其中有一个回复:
I suspect that Java was born and raised on a UNIX system.
UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970.

是说java 起源于 UNIX 系统,而 UNIX 认为 1970 年 1 月 1 日 0 点是时间纪元 .
但这依然没很好的解释" 为什么 ", 出于好奇,继续 Google ,总算找到了答案 :
http://en.wikipedia.org/wiki/Unix_time
这里的解释是:
最初计算机操作系统是32 位,而时间也是用 32 位表示。
System.out.println(Integer.MAX_VALUE);
2147483647

Integer在 JAVA 内用 32 位表 示,因此 32 位能表示的最大值是 2147483647。 另外1 年 365 天的总秒数是 31536000,
2147483647/31536000 = 68.1
也就是说32 位能表示的最长时间是 68 年,而实际上到 2038年 01 月 19 日 03 时 14 分 07
秒,便会到达最大时间,过了这个时间点,所 有 32 位操作系统时间便会变 为
10000000 00000000 00000000 00000000

也就是1901年 12月 13 日 20时 45 分 52 秒,这样便会出现时间回归的现象,很多软件便会运 行异常了。
到这里,我想问题的答案已经出来了:

因为用32 位来表示时间的最大间隔是 68 年,而最早出现的 UNIX 操作系统考虑到计算
机产生的年代和应用的时限综合取了 1970 年 1 月 1 日作为 UNIX TIME 的纪元时间 ( 开始
时间 ) ,而 java 自然也遵循了这一约束。

至于时间回归的现象相信随着64 为操作系统 的产生逐渐得到解决,因为用 64 位操作
系统可以表示到 292,277,026,596年 12月 4 日 15时 30 分 08 秒,相信我们的 N 代子孙,哪
怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

最后一个问题:上面System.out.println(new Date(0)),打印出来的时间是8点而非0点,
原因是存在系统时间和本地时间的问题,其实系统时间依然是0点,只不过我的电脑时区
设置为东8区,故打印的结果是8点。

我想以上问题如果作为面试题,也能难倒一批人了.

java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字相关推荐

  1. java计算整数出现的次数_[剑指offer题解][Java]1到n整数中1出现的次数

    前言 众所周知,<剑指offer>是一本"好书". 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白. 对于剑指offer题解这个系列,我的 ...

  2. java计算指定日期的上个月

    文章目录 java计算指定日期的上个月 Calendar类 API 代码实现 java计算指定日期的上个月 Calendar类 Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方 ...

  3. [JAVA]计算底面为正方形的长方体体积以及JAVA的math方法 2021-09-06

    [JAVA]计算底面为正方形的长方体体积 要求 函数需求 Java中自带的数学方法计算平方 1--10的随机数 计算出的结果向上取整 代码实现 JAVA的math方法 要求 1.底面正方形输入数据为浮 ...

  4. java计算图片md5_java 计算 文件 md5

    public class MD5Check { /** * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 */     pro ...

  5. java如何计算时间天数差,java计算两个时间相差天数的方法汇总

    问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是 ...

  6. java计算时间差距_硬计算和软计算之间的差异

    java计算时间差距 什么是计算? (What is Computing?) The process of accomplishing a particular task with the help ...

  7. java计算时间的秒数差,去掉周末和节假日

    java计算时间的秒数差,去掉周末和节假日 如题所说,计算两个时间的秒数(工作日),拿到这个需求,首先想到的就是怎么去掉周末和节假日,或者两个时间有一个在周末或节假日,或者两个时间都在,要分别进行处理 ...

  8. Java计算当前时间提前以及推迟几小时方法

    方法一:使用Calendar 类 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date ...

  9. Java计算时间区间内工作日天数

    Java计算时间区间内工作日天数,并去除放假日与周末重叠数据 实际生活中,国家法定假日可能与周六周日重叠,所以需要去重.对于放假补班的特殊情况,需要另外补充 实际生活中,国家法定假日可能与周六周日重叠 ...

最新文章

  1. bootstrap3中关于布局的两种样式
  2. 互联网巨头终极战场:得开发者得天下
  3. java8学习:用流收集数据
  4. MySQL之父与企鹅的故事
  5. 连通图遍历策略之深度优先搜索(C语言)
  6. HttpServletBean 、 FrameworkServlet 和 DispatcherServlet 关系
  7. 程序员如何认识更多异性_28岁女生国庆和年薪50万程序员相亲,看到对方工作状态后:后悔了......
  8. 重量级!Maven史上最全教程,看了必懂
  9. undefined reference to `create_module''
  10. 三菱PLC软件有LINUX版本吗,三菱PLC编程软件(GX Developer)
  11. 2017版张宇1000题【题目收集】
  12. arm rtx教程_【RTX操作系统教程】第5章 RTX操作系统库方式移植(超级...
  13. 尔雅 科学通史(吴国盛) 个人笔记及课后习题 2018 第十章 20世纪的科学技术变革
  14. 计算机桌面图标任意排列,教你win7电脑桌面图标怎么随意摆放
  15. 编程之美--数组中的最长递增子序列(LIS longest increasement sequence)
  16. 用Python来合并图片(SoEasy)
  17. 网站防篡改有什么方法
  18. 当Forms表单遇到Power BI
  19. Jetson TX2重要技巧
  20. Xilinx 黑金ZYNQ开发板AX7020,利用VIVADO进行FPGA程序烧录

热门文章

  1. C++实现简单的词法分析器
  2. 美国国防高级研究计划局(DARPA)组织管理运行机制分析
  3. 磁共振线圈分类_核磁线圈的基本架构及各部分主要功能
  4. SpaceX龙飞船顺利返航,溅落太平洋!后续太空任务已安排上
  5. cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie
  6. 微信小程序使用腾讯位置服务地图选点实现地址的选取|微信小程序腾讯位置服务地图选点请求来源未被授权
  7. 黑科技手机计算机,轻量又好用的黑科技APP,绝对能让你的手机能量满满!
  8. 计算机网络第三章——数据链路层(仅记录我所认为重要的知识点)
  9. 吴恩达《机器学习系列课程》学习笔记(一)
  10. 微信小程序手动添加收货地址省市区联动