Unix 时间戳

🌙
手机阅读
本文目录结构

Unix 时间戳 和 Unix 系统的关系

首先 Unix 时间戳 和 Unix 系统是没有半毛钱关系的;

什么是 Unix 时间戳 ?

unix 时间戳是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。

Unix 时间戳(英文为 Unix epoch, Unix time, POSIX time 或 Unix timestamp)

是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。

UNIX 时间戳的 0 按照 ISO 8601 规范为 :1970-01-01T00:00:00Z.

一个小时表示为 UNIX 时间戳格式为:3600 秒;一天表示为 UNIX 时间戳为 86400 秒,闰秒不计算。

在大多数的 UNIX 系统中 UNIX 时间戳存储为 32 位,这样会引发 2038 年问题或 Y2038。

对照表

时间
1 分钟 60
1 小时 3600
1 天 86400
1 周 604800
1 月 (30.44 天) 2629743
1 年 (365.24 天) 31556736

编程调用

编程语言指令
JavaScript
Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒
Java
time
Microsoft .NET / C#
epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000
MySQL
SELECT unix_timestamp(now())
Perl
time
PHP
time()
PostgreSQL
SELECT extract(epoch FROM now())
Python
先 import time 然后 time.time() 返回1476929706.5320001
可以 int(time.time())
Ruby
获取Unix时间戳:Time.now 或 Time.new
显示Unix时间戳:Time.now.to_i
SQL Server
SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
Unix /Linux/类UNIX/OS X
date +%s
VBScript / ASP
DateDiff("s", "01/01/1970 08:00:00", Now())
luaos.time() 返回时间戳
FreeSWITCH
fs_cli > strepoch
或者:
fs_cli > eval ${strepoch()}
或者:
(在 freeswitch里面,获取linux系统的时间戳)
fs_cli > system date +%s
其他操作系统
(如果Perl被安装在系统中)
命令行状态:perl -e "print time"

相关漏洞

64 位 iOS 系统负时间值问题

搭载 64 位处理器的 iOS 设备的时间 bug。

假设一种情况,我原来是北京时区,假设将时间设置到了 1970 年 1 月 1 日 0 点 0 时 0 秒,那么我将这个时间转换为 UTC 时间,公式:北京时间 =GMT+8=UTC+8,那么 UTC 时间则为 1969 年 12 月 31 日 16 时 0 分 0 秒。这样就会出现时间负值,即时间回归 bug 触发,系统启动卡在 Kernel 阶段,时间错误,无法继续进行启动。

那么既然时间不能往前调,好奇的朋友可能会往后调,当我们往后调的时候会发现 iOS 系统可以设置的最大时间是 2038 年 1 月 1 日,并不能再往后设置了。为什么时间只能调到这里?

我们了解一下在 32 位系统中,time_t 是长度为 32 位的,有符号整数(signed int)类型。首个二进制位是符号位,用来储存正负。正数则为 1970/1/1 以后的时间,负数反之;其余的 31 位用来记数。当时间到达 2038 年 1 月 19 日 3 时 14 分 08 秒(北京时间 2038 年 1 月 19 日 11 时 14 分 08 秒)时,数值位全部向前进 1,导致符号位被置 1,其余 31 位为 0。介时,将出现“时间回归”的情况,系统时间变为 1901 年 12 月 13 日 20 时 45 分 52 秒,系统将会出现错误。

1970 年 1 月 1 日就像病毒一样在世界蔓延开来了,不仅很多国外网友中招,在国内有很多 iPhone 用户也都尝试了。笔者刚刚看到关于 1970 年变砖的视频后,内心是不相信的,觉得这个视频后半段开机画面是被剪掉了,然后笔者就手贱的进行了尝试,把时间设置成 1970 年 1 月 1 日,手机关机重启真的停留在白苹果了,变“砖头”了,真是应了这句话“不作就不会死”。

然后小编只能用仅有的一点手机维修的功底,把手机拆开,断开电池与主板的连接,为了保险起见等待了十分钟,重新连接电池,然后开机就正常了,这只是解决“苹果 1970 年事件”其中一种方法。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了