为什么编程时间从1970年1月1日开始?

最初计算机操作系统是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代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

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

  那时的计算机操作系统是32位,时间用32位有符号数表示,则可表示 68 年,

  用32位无符号数表示,可表示136年。他们认为 以 1970年 为时间 原点 足够可以了。 因此,C 的 time 函数 就这么 定了,后来的 java 等也用它,微机也用它,工作站本来就是unix系统当然也用它。(今后若用64位机年限更没问题。)

  1970年1月1日 算 UNIX 和 C语言 生日。

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

时间: 2024-08-17 15:24:33

为什么编程时间从1970年1月1日开始?的相关文章

为什么编程时间从1970年1月1日開始?

查看原文:http://www.ibloger.net/article/136.html 最初计算机操作系统是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月

java为啥计算时间从1970年1月1日开始

http://www.myexception.cn/program/1494616.html ---------------------------------------------------------- java为什么计算时间从1970年1月1日开始 今天在看Python  API 时,看到 time 模块 : The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the

Java 获取各时区时间,获取当前时间到格林威治时间1970年01月01日00时00分00秒的秒数

格林威治时间即UTC/GMT时间,1970年01月01日00时00分00秒(即UTC+8的北京时间1970年01月01日08时00分00秒)计算代码如下: 1 /** 2 * 获取指定时间到格林威治时间的秒数 3 * UTC:格林威治时间1970年01月01日00时00分00秒(UTC+8北京时间1970年01月01日08时00分00秒) 4 * @param time 5 * @return 6 */ 7 public static long diffSeconds(String time){

日期类的时间从为什么是从1970年1月1日(格林威治时间)

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/

为什么编程语言以及数据库要从1970年1月1日开始计算时

今天在看Python  API时,看到time模块: The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the “time since the epoch” is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0). 定义time从1970年1月1日开始,忽然想

判断距离1970年1月1日的天数

#include <stdlib.h> /****************************************************************** 功能: 输入年月日,计算距离1970年1月1日的天数 输入: 年月日,输入年份范围[1970,2100],输入年月日的有效性需要判断 输出: DaysSince1970:距离1970年1月1日的天数 已知 1970年1月1日为星期四 异常时,输出不需要关注 返回: 1 上班 0 休假 -1 表示异常 根据国家规定:周一到

编程练习效果图:XXXX年XX月X日 星期X--班级总分为:81

编程练习 某班的成绩出来了,现在老师要把班级的成绩打印出来. 效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似"XXXX年XX月XX日 星期X" 的当前的时间. 2.计算出该班级的平均分(保留整数). 同学成绩数据如下: "小明:87; 小花:81; 小红:97; 小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76" 任务 第一步:可通过javascript的日期对象来得到当前的

2015编程之美资格赛 A 2月29日

 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February&quo

从1970年1月1日00:00:00 GMT以来此时间对象表示的毫秒数转化为Datetime

将Long类型转换为DateTime类型 /// <summary> /// 将Long类型转换为DateTime类型 /// </summary> /// <param name="d">long</param> /// <returns></returns> public static DateTime ConvertLongDateTime(long ticks) { DateTime dtBase = ne