我正在尝试使用下面的perl命令将纪元时间转换为可读的本地时间:
bash-3.2$ perl -le print\ scalar\ localtime\ 32503651200
Thu Mar 9 19:13:52 1911
在2038年之后可以正确转换,但是对于年份数大于2038年我无法获得预期结果。
请告知如何解决。感谢。
答案 0 :(得分:8)
32位系统上的year 2038 bug为worked around in Perl 5.12.0(64位系统不受2038错误的影响)。我知道因为I did it(有帮助)。 :)只需升级您的Perl并解决问题(以及其他许多问题)。
或者,使用日期库,例如DateTime。它不依赖于系统时间函数(2038错误的根源),不受y2038错误的影响,并且通常更容易使用。
如果您无法升级Perl且必须使用localtime
和gmtime
,您可以使用Time::y2038获取不受此影响的功能版本2038年的错误。
答案 1 :(得分:0)
2038年问题是计算和数据存储情况的一个问题,其中时间值被存储或计算为带符号的32位整数,并且此数字被解释为自00:00:00 UTC起的秒数1970年1月1日("纪元")。1此类实施无法对2038年1月19日03:14:07 UTC后的时间进行编码,这个问题类似但不完全类似于&#34 ; Y2K问题" (也称为" Millennium Bug"),其中表示自1900年以来的年数的2位数值无法编码2000年或更晚。大多数32位类Unix系统在这个" Unix时间存储和操作时间"格式