我得到二进制格式的时间戳,例如:
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
以考虑到这一点。