精华内容
下载资源
问答
  • 2018-04-19 17:57:00

    Linux中的时间
    UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。

    目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间领域:
    2^31/86400(s) = 24855.13481(天) ~ 68.0958(年)
    1970+68.0958 = 2038.0958
    1970-68.0958 = 1901.9042
    时间领域为[1901.9042,2038.0958]
    准确的时间为2038年一月十八日星期一晚上十点十四分七秒。那一刻,时间将会转为负数,变成1901年十二月十三日黑色星期五下午三点四十五分五十二秒,然後Jason就会跑出来用斧头砸掉您的电脑。
    这就是所谓的UNIX 2038 BUG,或者您也可戏称为Jason hatchet bug。在大部份的UNIX上,并没有所谓Y2K问题,不过都有2038年问题。

    在一些64位元的平台上,例如Digital Alpha、SGI、Sparc等等,则用64位元来表示时间。
    2^63/86400 ~ 1E14(天) ~ 2.92E11(年) 。大约是2920亿年。
    因此,使用64位元的电脑可能会有 Armageddon bug 的问题。届时位於猎户座旋臂的太阳,已经是黑矮星或暗黑物质,猎户座旋臂大概也已经被重力波震断,银河系大概则已经变成小型似星体了。

    虽然许多人认为UNIX的2038年问题会随着科技的进步,而将电脑逐步汰换成64位元电脑,因此无须担心。但我个人相信,在2038年,依然会有许多状况出现。因为,就事实而言,目前许多UNIX系统都有足够的能力服役到2038年而毫无问题。因此,如果有意添购电脑主机,而且有预期会使用到那个时候,最好是选购64位元电脑,确认只有世界末日问题(除非您想要把资料流传给下一个宇宙,那就要另当别论了)。

    更多相关内容
  • 1970年1月1日到现在的秒数计算日期

    千次阅读 2020-09-04 14:59:50
    1970年1月1日到现在的秒数计算日期 #include <stdio.h> int year=1970; int month=1; int day=1; int yuefen[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int yuefen1[12] = {31, 29, 31, 30,...

    1970年1月1日到现在的秒数计算日期

    #include <stdio.h>
    
    int year=1970;
    int month=1;
    int day=1; 
    int yuefen[12]  = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int yuefen1[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//闰年 
    
    int main(void)
    {
    	long ret;
    	int months;//月份 
    	int days;//天 
    	int hours;//小时 
    	int minute;//分钟 
    	int second;//秒 
    	int i,q;
    	int temp=0;
    	
    	scanf("%d",&ret);//输入秒数 
    	days=(int)ret/(24*3600);//计算天数,一天24*60*60秒 
    	
    	ret = ret  % ( 24 * 3600 );//当前天的总秒数 
    	hours =int( ret / 3600);//计算当前天的小时 
    	ret = ret % 3600;//分钟的秒数+秒数 
    	minute = int( ret / 60 );//计算当前天的分钟 
    	second = int( ret % 60 );//当前的秒数 
    	
    	//计算年份 
    	for(i=days;i>364;i--)
    	{
    		if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年 
    		{
    			year=year+1;
    			i=i-366+1;
    		}
    		else{//非闰年 
    			year=year+1;
    			i=i-365+1;
    		}
    	}
    	printf("day:%d\r\n",i);
    	
    	if((year%4 == 0 && year%100 != 0) || year%400 == 0) //闰年 
    	{
    		if(i<31)
    		{
    			months=1;
    			day=i+1;
    		}
    		else
    		{
    			for(q = 0; q < 12; q++)
    			{
    				temp = yuefen1[q];
    				if(temp<i+1)
    				{
    					months=q+1;
    					i=i-yuefen1[q];
    					
    				}
    				else break;
    				//break;
    			}
    			day=i+1;
    			months=months+1;
    		}	
    		
    	}
    	else//非闰年 
    	{
    		if(i<31)
    		{
    			months=1;
    			day=i+1;
    		}
    		else
    		{
    			for(q =0; q < 12; q++)
    			{
    				temp = yuefen[q];
    				if(temp<i+1)
    				{
    					months=q+1;
    					i=i-yuefen[q];
    					//break;
    				}
    				else break;
    			}
    			day=i+1;
    			months=months+1;
    			
    		}
    	
    			
    	}
    	printf("%d年   %d月   %d日   \r\n",year,months,day);	
    	printf("%d天   %d小时    %d分钟   %d秒数\r\n",days,hours,minute,second);
    	
    }
    
    展开全文
  • 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算? 今天在看Python API时,看到time模块: The epoch is the point where the time starts. On January 1st of ...

    计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从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日开始,忽然想到在JAVA里,Oracle数据库时间也是从1970
    年1月1日开始计算。比如java类代码
    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点。
    我想以上问题如果作为面试题,也能难倒一批人了.
                   

    展开全文
  • 今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分...
    导读
     今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分都没有想过这个问题。我们就一起来聊聊,这是为什么?

    为什么计算机时间要从1970年1月1日开始算起为什么计算机时间要从1970年1月1日开始算起

    1、最懒的解释

    很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。

    说了这个懒人的解释,估计大家还没有懂得真正的意思。所以我们接下来深入的了解一下。

    2、深入了解

    最初计算机操作系统是32位,而时间也是用32位表示。

    1.System.out.println(Integer.MAX_VALUE);
    2.2147483647
    

    Integer 在JAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总秒数是 31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,从1970年开始的话,加上68.1,实际最终到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的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到 292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后 了。



     本文地址 :  http://www.linuxprobe.com/why-computer-time.html

     免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/


    展开全文
  • 在系统提供的C语言函数中,获取的时间值是从1970年1月1日0点到当前时间所流经的秒数,如果我们基于此计算两个时间之间天数的差值,将会大大简化我们的计算公式 /> cat > test6.sh #!/bin...
  • 问题由来:之前在JS中学到Date对象时,时间是从1970年1月1日0时开始的,现在看Java居然也是这样,就很好奇,为什么时间都用这个时间点来计算。然后百度了下,发现有一个很好的帖子描述了这个问题。现在转载过来,以...
  • 不用月份表,润平的处理,几行就可得出结果,以下是程序和大神的解析Linux源码中的mktime算法解析我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月时分秒是分开存储的。...
  • 今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分...
  • 不用月份表,润平的处理,几行就可得出结果,以下是程序和大神的解析Linux源码中的mktime算法解析我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月时分秒是分开存储的。...
  • LINUX系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数。如/etc/shadow里的密码更改日期和失效日期,还有代理服务器的访问日志对访问时间的记录等等。 1、分别以标准格式和...
  • 该值是自协调世界时(UTC)1970年1月1日00:00:00这个特定时间以来所经过的秒数累计值。基本数据类型用time_t保存。最后通过转换才能得到我们平时所看到的24小时制或者12小时间制的时间。 (2)进程时间。也被称为CPU...
  • Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数。二、C代码实现/********************************************************************* * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:...
  • 计算机时间、unix时间、Linux时间、java时间为何以1970年1月1日为原点从1970年1月1日开始计算? 今天在看Python API时,看到time模块: The epoch is the point where the time starts. On January 1st ...
  • Linux内核之Kernel目录

    2021-06-14 07:51:11
    通过本课程的学习,可以达到以下目的: 1、通过asm.s及trap.c的学习...5、mktime.c中对系统如何构建从1970年1月1日0时开始的时间及闰年的处理有最原始的描述; 6、最后,课程会介绍与内核打印相关的函数的实现细节。
  • Linux date命令用法详解

    2021-01-09 18:35:33
    Linux date命令 Linux date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记...%s : 从 1970 1 1 00:00:00 UTC 到目前为止
  • 计算当前时间距离1970-1-1 0.0.0的秒数

    千次阅读 2018-11-05 16:06:07
    这个算法来自LINUX的源码,下面带有大神的解析,测试过,只用输入时间,即可得到距离1970-1-1 0:0:0的秒数! Linux源码中的mktime算法解析 我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct ...
  • Linux下Date命令的用法

    2021-01-09 15:40:17
    取得时间戳,时间戳是指从1970年1月1日0点0分到现在一共经过了多少秒  date +%s  反之:通过秒数查具体年月日  date -d ' 1970-01-01 UTC 1204704624 seconds'  3.以24小时制显示小时  date +%H  4.以12...
  • Linux中的$1代表什么?

    千次阅读 2021-05-28 03:44:01
    七.1、SHELL SCRIPTS· 什么是 shell scripts ? scripts 有何功用?o 简单的说, scripts 就是一个内部含有多个或复杂的 command 的纯文字档案;o scripts 可以进行 program 的功能,但速度上较 C 慢了点!· 要...
  • Linux date命令的使用

    2021-01-09 01:18:34
    在类Unix系统中,日期被存储为一个整数,其大小为协调世界时(UTC)1970年1月1日0时0分0秒起流逝的秒数,即Unix时间戳。 2.命令格式 date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][....
  • Linux的基本指令-1

    2022-03-20 09:22:05
    Linux的基本指令ls指令:对于目录列出该目录下的所以子目录与文件 对于文件,列出文件名以及其他信息pwd:用来显示用户当前所在目录cd:跳转工作目录touch:创建普通文件mkdir:在当前目录下创建一个新的空目录rmdir...
  • 1. Linux系统简介

    千次阅读 2020-07-28 09:12:16
    学习 Linux 的第一个问题是搞明白 Linux 是什么,了解其来龙去脉、前世今生,知道其发展趋势、应用前景,弄清楚为什么学习它,以及如何掌握它和使用它,知其然更要知其所以然。 本章致力于让读者对 Linux 有一个宏观...
  • Linux内核版本: 3.5 1.1 Linux下RTC时间的读写分析 1.1.1 系统时间与RTC实时时钟时间 Linux系统下包含两个时间:系统时间和RTC时间。 系统时间:是由主芯片的定时器进行维护的时间,一般情况下都会选择芯片上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,825
精华内容 8,730
关键字:

linux1970年1月1日