在Windows上,如何将1970年之前的时间戳转换为易于管理的东西?

Pot*_*bic 4 python windows

总结:Mac上的"负面"时间戳工作正常,但在Windows上我无法将它们转换为可用的东西.

详细信息:我可以在Windows上有一个文件,其修改时间是1904年:

$ ls -l peter.txt
-rw-r--r--    1 sync     Administ        1 Jan  1  1904 peter.txt
Run Code Online (Sandbox Code Playgroud)

在python中:

>>> import os
>>> ss = os.stat('peter.txt')
>>> ss.st_mtime
-2082816000.0
Run Code Online (Sandbox Code Playgroud)

大.但我无法弄清楚如何将负时间戳转换为日期/时间字符串.在Mac上,此代码工作正常.

>>> datetime.fromtimestamp(-2082816000)
datetime.datetime(1904, 1, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)

从这里我可以做任何我想要的格式化.

但在Windows上它失败了:

>>> datetime.fromtimestamp(-2082816000)
Traceback (most recent call last):    
  File "<stdin>", line 1, in <module>
ValueError: timestamp out of range for platform localtime()/gmtime() function
Run Code Online (Sandbox Code Playgroud)

并尝试我能想到的任何其他事情失败:

>>> time.gmtime(-2082816000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: (22, 'Invalid argument')
Run Code Online (Sandbox Code Playgroud)

精彩的python-dateutil包似乎没有这个功能.我看过时间,日历和日期时间模块.有帮助吗?

Ign*_*ams 9

>>> datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=-2082816000)
datetime.datetime(1904, 1, 1, 8, 0)
Run Code Online (Sandbox Code Playgroud)


Mat*_*eaf 5

使用 Ignacio 的想法,此函数会将任何时间戳转换为正确的原始日期时间对象:

def convert_timestamp_to_datetime(timestamp):
    import datetime as dt
    if timestamp >=0:
        return dt.datetime.fromtimestamp(timestamp)
    else:
        return dt.datetime(1970, 1, 1) + dt.timedelta(seconds=int(timestamp))
Run Code Online (Sandbox Code Playgroud)