将大于maxint的时间戳转换为datetime对象

GP8*_*P89 4 python datetime year2038

我有一些代码将一些存储为字符串的时间戳转换为datetime对象,并注意到今天转换日期时int时间戳值大于max int的异常.

datetime.datetime.fromtimestamp(2147570047)
Run Code Online (Sandbox Code Playgroud)

比如给我

ValueError: timestamp out of range for platform time_t
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?假设我想继续使用32位python(运行2.7.2)

我注意到我可以将max int转换为datetime对象,然后使用timedeltas添加任何额外的东西,但我想不出在实践中这样做的特别有效或好的方法.我可以将这些2038多个时间戳转换为datetime对象的好方法是什么?

GP8*_*P89 7

想想我已经解决了,我有点惊讶的是,这不会引发同样的异常

>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2147570047)
datetime.datetime(2038, 1, 20, 4, 14, 7)
Run Code Online (Sandbox Code Playgroud)

编辑:这不是一个完美的解决方案,似乎是时区的一些问题(我目前在BST时间(+1)所以可能解释为什么这下面相隔一小时)

>>> datetime.datetime.fromtimestamp(2047570047)
datetime.datetime(2034, 11, 19, 17, 27, 27)
>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2047570047)
datetime.datetime(2034, 11, 19, 18, 27, 27)
Run Code Online (Sandbox Code Playgroud)

  • `fromtimestamp`有问题(在某些系统上)是因为它基于系统C功能.该文档指出,这通常局限于1970年至2038年.另一方面,"timedelta"是为Python定制的,并且处理持续时间不到10亿天. (4认同)