在Python中将unix纪元时间转换为windows纪元时间

时间:2011-12-29 16:41:44

标签: python windows unix datetime epoch

快速提问: 是否有pythonic(无论是否在标准库中)将unix 32位纪元时间转换为Windows 64位纪元时间并再次返回?

2 个答案:

答案 0 :(得分:8)

您可以使用

将POSIX时间戳转换为datetime
>>> tstamp = 1325178061  # right about now
>>> from datetime import datetime
>>> datetime.fromtimestamp(tstamp)
datetime.datetime(2011, 12, 29, 18, 1, 1)

fromtimestamp命名构造函数接受所有平台上的POSIX时间戳(!)。

转换为Windows时间戳是减去Windows纪元的问题,Wikipedia says是1601年1月1日,并将生成的timedelta转换为秒数:

>>> W_EPOCH = datetime(1601, 1, 1)
>>> (datetime.fromtimestamp(tstamp) - W_EPOCH).total_seconds()
12969655261.0

现在您已经转换为float int,并以您喜欢的方式存储为64位数量。

答案 1 :(得分:0)

要从Windows EPOCH时间戳转换为 datetime 对象(但不能相反);这是我想出的解决方案:

from datetime import datetime, timezone
def convert_from(windows_timestamp: int) -> datetime:
    unix_epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
    windows_epoch = datetime(1601, 1, 1, tzinfo=timezone.utc)
    epoch_delta = unix_epoch - windows_epoch
    windows_timestamp_in_seconds = windows_timestamp / 10_000_000
    unix_timestamp = windows_timestamp_in_seconds - epoch_delta.total_seconds()

    return datetime.utcfromtimestamp(unix_timestamp)

这允许您按原样传递Windows时间戳,它将吐出有效的Python datetime 对象。

注意:这是特定于Python 3的。