精华内容
下载资源
问答
  • 为啥人类从1970年1月1日开始计时?

    千次阅读 2019-03-28 10:03:41
    人类操作系统元年 目前,人类计算机通过一个64位整数...为啥从1970年初开始计时呢,有一个原因是,现代人类操作系统的共同祖先----unix是在1970年正式诞生的,1970年可称为"UNIX元年"。我们都知道 ,硬件计时必须要...

    人类操作系统元年

    目前,人类计算机通过一个64位整数来存储时间,它表示从西方时间(伦敦)1970年1月1日0点开始到现在所经过的毫秒数,比如:

    > Date.now()

    < 1553735643986

    为啥从1970年初开始计时呢,有一个原因是,现代人类操作系统的共同祖先----unix是在1970年正式诞生的,1970年可称为"UNIX元年"。我们都知道 ,硬件计时必须要常驻机器的OS来维护,所以,当UNIX出现以后,各种需要调用时间api的应用才相应出现,对于目前来说也是一样,软件史上的重要事件都发生在1970年之后,这个时间点不大不小正正好,1970年之前的时间点可以使用负数表示。

    还有一个原因,最初计算机操作系统是32位,时间也就用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的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,这个时间已经是千亿年以后了。
     

    Worldwide Scope的全局变量

    全局变量都很熟悉,比如浏览器窗口中的window对象,非常实用。

    我们目前接触到的全局变量都是进程级别或者更大一点就是系统级别的,但有没有想过有一个全局变量是“全球”级别的,也就是“全球对象”,而且不需要通过互联网同步!没错,这就是Date对象:无论生在何处,相距多远,你们总是share一个相同的数据:当前的时间(假设宇宙时间均匀(●'◡'●))。那利用全球对象Date能做哪些不可描述的事情呢?比如在断网的情况下进行同步任务;或者将Date作为种子生成相同的2个随机数。。。事实上我们一直在利用‘时间’来揣测对方的情况。

    展开全文
  • java为什么计算时间从1970年1月1日开始 java为什么计算时间从1970年1月1日开始java 1970 今天在看Python API 时,看到 time 模块 : The epoch is the point where the time starts. On January 1st of that year, at...

    java为什么计算时间从1970年1月1日开始
    java为什么计算时间从1970年1月1日开始java 1970
    今天在看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年到现在的时间长度计算现在的日期,具体操作如下: System.out.print(new Date(file.getAccessTime()).toString()+"\t"); ...

    通过从1970年到现在的时间长度计算现在的日期,具体操作如下:

    System.out.print(new Date(file.getAccessTime()).toString()+"\t");

    转载于:https://my.oschina.net/mkh/blog/78300

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

    万次阅读 多人点赞 2017-03-05 13:06:56
    为什么计算机时间要从1970年1月1日开始算起1、最懒的解释 很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以为偶们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。 2、深入的...

    1、最懒的解释
    很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以为偶们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。
    2、深入的了解
    最初计算机操作系统是32位,而时间也是32为表示。

    System.out.println(Integer.MAX_VALUE);     2147483647

    Integer在java内用32位表示,因此32为能表示的最大值就是2147483647。另外一年365天的总秒数是31536000,2147483647/31536000=68.1,也就是说32为能表示的最长时间是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位操作系统可以表示到292,277,026,596年的12月4日14时30分08秒,这是时间已经是千亿年以后了,所以也不用担心了。

    展开全文
  • 几天看到了Date类型,不禁疑惑为什么Date.getTime为什么从1970-01-01算起呢? 1、最懒的解释 很多编程语言起源于UNIX系统,而UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点...
  • 本人简简单单pd.to_datetime函数debug两小时,简直气死,于是怒开一贴 情况是这样 先给大家说下我要转换的数据是20120801到20210301 其实非常简单的一个转换时间戳的问题,...变成从1970-01-01 00:00:00开始...
  • #计算从1970年到现在过去了多长时间 import time times = int(time.time())#1970年1月1日00:00:00到现在的秒数 print(times) seconds = times % 60 hours = times // 3600 minutes = (times - hours * 3600) // 60...
  • 今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为 什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分...
  • UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970. 是说java起源于UNIX系统,而UNIX认为1970年1月1日0点是时间纪元. 但这依然没很好的解释"为什么",出于好奇...
  • 使用场景,比如需要从一堆... xxxx: #statinfo.st_ctime 获取文件的时间属性,表示从1970/1/1 08:00:00到文件时间属性过的总秒数 get(filename) 因为需要选出2017/12/13 00:00:00以后的文件,那么上面代码中的xxx
  • java中System.currentTimeMillis()取到的是从1970-01-01 00:00:00.000到当前时间的毫秒数,一个long类型的值。 现在oracle数据库中某表中存取的是该值,需要将其转换为可读的date类型。 current millis中提供了...
  • 计算机时间、unix时间、...从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 epo
  • 今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分...
  • 编程时间从1970年1月1号0点开始计算的原因 最初计算机操作系统是32位,而时间也是用32位表示。 (Integer.MAX_VALUE); 2147483647 Integer用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的总秒数...
  • java 判断两个日期时间/两个时间戳之间相隔多少天,也可用于获取从1970年以来到某个时间之间相隔多少天 判断两个日期时间/两个时间戳之间相隔多少天 也可用于获取从1970年以来到某个时间之间相隔多少天 //2019-...
  • java为什么计算时间从1970年1月1日开始
  • Date date = new Date(0);...也是1970 年 1 月 1 日,实际上时分秒是 0 点 0 分 0 秒 ( 这里打印出来是 8 点,稍后会作解释 ) 。 为什么这个时间会定义在1970 年 1 月 1 日这个时候呢 ? 于是开始了Google ,中...
  • //Java中的getTime方法默认的是从1970 1 1 算起所以可以直接调用 //获取从1970 1 1到当前毫秒数 public class test1{ public static void main(String[] args) { System.out.println(Calendar.getInstance()....
  • 用于获取从1970-1-1到目前为止的毫秒数。 当时刚接触的时候,我就很纳闷,这是为什么?为什么偏偏要设计一个1970-1-1作为起始时间点,计算经过时间的函数? 经过一番了解,知道了Unix time 同时HERE解释了为什么...
  • Linux中的时间从1970年01月01日开始

    千次阅读 2018-04-19 17:57:00
    Linux中的时间UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,942
精华内容 47,176
关键字:

从1970