纳秒表现出奇怪的行为

New*_*ler 0 python time datetime

我有以下目标:在 python 中将日期时间字符串转换为纳秒整数。

这是我在这个过程中发现的奇怪之处:

from datetime import datetime

datetime_str = '2015-01-08T08:23:21.301812Z'

nanoseconds = 1000000000
datetime_nanoseconds = int(datetime.strptime(datetime_str, '%Y-%m-%dT%H:%M:%S.%fZ').timestamp() * nanoseconds)
Run Code Online (Sandbox Code Playgroud)

当我打印时,datetime_nanoseconds我得到以下数字1420701801301811968

第一个问题:最后三个数字968从何而来?我期待1420701801301812000

令人惊讶的是,如果我除以1420701801301811968 / nanoseconds我会1420701801.30181在几秒钟内得到我期望的值2,而这最后三位数字现在消失了。

第二个问题:为什么最后三位数字现在消失了?

我觉得python不适用于亚微秒时间......

任何有关该主题的帮助将不胜感激。

Tim*_*rts 6

datetime.timestamp()返回一个浮点值。与 Python 的整数不同,浮点值没有无限精度。双精度浮点数大约有 17 位精度,而您已经超过了这个数字。所以,不要使用timestamp(). 获取 的整数值timestamp(),乘以 1000000,加上该microsecond值,再乘以 1000。