将Microsoft二进制格式时间戳转换为Python unix时间戳



我得到二进制格式的时间戳,例如:

5249363694976427904

如何在Python中将其转换为unix时间戳?

我指出以下网站格式,但其在c#中:这里

下面的链接是c#中用来生成二进制日期时间的函数:这里

int是一组2位和62位值的表示,第一个是时间戳(UTC, local, undefined)的Kind。第二个是自0001-01-01 00:00:00以来的滴答数,其中每个滴答被定义为0.1微秒。

所以我们只需要将int转换回二进制,将其分成每个部分,转换为微秒,然后将timedelta添加到我们的基准日期。

这个应该可以帮你:

from datetime import datetime, timedelta
def ticks_to_datetime(binary_time: int) -> datetime:
binary_time_string = f"{binary_time:064b}"
# Not used here, but you can expand to check based on
# https://learn.microsoft.com/en-us/dotnet/api/system.datetimekind?view=net-5.0
time_kind = binary_time_string[:2]
time_microseconds = int(binary_time_string[2:], 2) / 10
time_difference = timedelta(microseconds=time_microseconds)
return datetime(1, 1, 1) + time_difference
my_time = ticks_to_datetime(5249363694976427904)
print(f"{my_time} | {my_time.timestamp()}")

结果:

2021-09-20 20:47:34.904000 | 1632170854.904
[Finished in 68ms]

请注意,我不处理二进制时间的Kind,因此,如果您发现自己需要处理来自本地时区的时间戳,则需要修改return行中的datetime以考虑到这一点。

最新更新