3

我正在尝试使用以下 perl 命令将纪元时间转换为可读的本地时间:

       bash-3.2$ perl -le print\ scalar\ localtime\ 32503651200
       Thu Mar  9 19:13:52 1911

可以正确转换低于 2038 年的年份,但是对于大于 2038 年的年份数字,我无法得到预期的结果。

请告知如何修复。谢谢。

4

2 回答 2

8

32 位系统上的2038 年错误在 Perl 5.12.0 中得到解决(64 位系统不受 2038 年错误的影响)。我知道是因为我做到了(在帮助下)。:) 只需升级您的 Perl,问题(以及许多其他问题)就解决了。

或者,使用日期库,例如DateTime。它不依赖系统时间函数(2038 漏洞的根源),不受 y2038 漏洞的影响,并且通常更容易使用。

如果您无法升级 Perl 并且必须使用localtimeand gmtime,您可以使用Time::y2038来获取不受 2038 错误影响的这些功能的版本。

于 2016-09-23T04:58:04.497 回答
0

2038年问题

2038 年问题是计算和数据存储情况的问题,其中时间值被存储或计算为有符号的 32 位整数,该数字被解释为自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数(“时代”)。1此类实现无法对 2038 年 1 月 19 日 03:14:07 UTC 之后的时间进行编码,该问题类似于但不完全类似于“千年虫问题”(也称为“千年虫”),其中 2 位值表示自 1900 年以来的年数无法编码 2000 年或更晚的年份。大多数 32 位类 Unix 系统以这种“Unix 时间”格式存储和操作时间

于 2016-09-23T04:34:09.693 回答