python将文件时间转换为1970年之前日期的日期时间

Ech*_*cho 5 python datetime filetime

我需要将文件时间转换为日期时间。我正在使用此代码filetime.py,从这里线程Datetime 到 filetime (Python) 中提到的。

在代码中

EPOCH_AS_FILETIME = 116444736000000000  # January 1, 1970 as MS file time
HUNDREDS_OF_NANOSECONDS = 10000000

def filetime_to_dt(ft):
    """Converts a Microsoft filetime number to a Python datetime. The new datetime object is time zone-naive but is equivalent to tzinfo=utc.

    >>> filetime_to_dt(116444736000000000)
    datetime.datetime(1970, 1, 1, 0, 0)
    """
    # Get seconds and remainder in terms of Unix epoch
    (s, ns100) = divmod(ft - EPOCH_AS_FILETIME, HUNDREDS_OF_NANOSECONDS)
    # Convert to datetime object
    dt = datetime.utcfromtimestamp(s)
    # Add remainder in as microseconds. Python 3.2 requires an integer
    dt = dt.replace(microsecond=(ns100 // 10))
    return dt
Run Code Online (Sandbox Code Playgroud)

datetime.utcfromtimestamp在 Windows 系统上不取负值,所以我不能在 1970 年 1 月 1 日之前转换文件时间。但我可以在 Mac 上使用完全相同的代码转换 1970 年之前的日期(原因在这里)。windows有什么解决办法吗?

Mar*_*som 3

通过将 a 添加timedelta到参考日期,您可以使用您想要的任何日期公式。timedelta允许为正或负。

def filetime_to_dt(ft):
    us = (ft - EPOCH_AS_FILETIME) // 10
    return datetime(1970, 1, 1) + timedelta(microseconds = us)
Run Code Online (Sandbox Code Playgroud)