1. 云栖社区>
  2. PHP教程>
  3. 正文

unix时间2038问题

作者:用户 来源:互联网 时间:2017-12-01 18:28:05

问题unix时间2038

unix时间2038问题 - 摘要: 本文讲的是unix时间2038问题, 自从找到工作之后好久没有更博客了。。。今天写php的时候遇到了个神奇的问题,现在来说一说~ 在php的时间方法里,mktime用的是unix时间戳,返回一个日期的 UNIX 时间戳。然后使用它来查找该日期的天。 语法: mktime(

自从找到工作之后好久没有更博客了。。。今天写php的时候遇到了个神奇的问题,现在来说一说~

在php的时间方法里,mktime用的是unix时间戳,返回一个日期的 UNIX 时间戳。然后使用它来查找该日期的天。
语法:

mktime(hour,minute,second,month,day,year,is_dst);

如图,当我将year设为2038时
unix时间2038问题-

效果如下,可正常显示为2038年1月1日
unix时间2038问题-

but~当我将year改为2050年时————
unix时间2038问题-
什么鬼?!我明明写的2050年好吗?!为毛给我显示成1970年1月1日??
于是不信邪的我又尝试了其他的时间,发现只要year大于2038就显示成1970!!what?这么神奇?!难道2038年是世界末日嘛!!

在一番脑洞大开之后,我仔细观察了一下,1970-1-1 08:00:00 咦?怎么这个时间这么熟悉呢??这不是UNIX时间戳为0的时间嘛。。。

于是我去网上查了一下关于unix时间戳相关的知识,发现:

所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。

依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日 03:14:07,星期二(UTC)。超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实作而跳回1970年或1901 年。错误的计算及动作可能因此产生。

其实就是在32位系统上,长度溢出导致的异常。

嗷嗷原来是这样啊。。那2038年之后咋办呢?这不马上就要到了么?毕竟我还年轻⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

于是,找到了这个 ↓

开源自由软件社区开始对2038年问题展开努力
unix时间2038问题-

好吧好吧(∩_∩),这我就放心啦~

所以叻~遇到2038这个问题的同学们就不用担心啦,安心用吧,会有替代方案的,我们就坐等问题解决吧O(∩_∩)O~~

以上是unix时间2038问题的全部内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有其他相关内容,欢迎继续使用右上角搜索按钮进行搜索问题 , unix , 时间 2038 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备
Apache Spark Meetup China 第1期 最全资料下载