代码之家  ›  专栏  ›  技术社区  ›  Newskooler

纳秒表现出奇怪的行为

  •  0
  • Newskooler  · 技术社区  · 3 年前

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

    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)
    

    当我打印的时候 datetime_nanoseconds 我得到以下号码 1420701801301811968 .

    第一个问题 :最后三个数字在哪里 968 来自我正期待着 1420701801301812000

    如果我分开 1420701801301811968 / nanoseconds 我得到了我期望的价值 1420701801.30181 2秒后,最后三个数字消失了。

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

    在此问题上的任何帮助都将不胜感激。

    1 回复  |  直到 3 年前
        1
  •  6
  •   Tim Roberts    3 年前

    datetime.timestamp() 返回一个浮点值。与Python的整数不同,浮点值没有无限精度。双精度浮点大约有17位数的精度,你已经超过了。所以,不要使用 timestamp() .获取 时间戳() ,乘以1000000,将 microsecond 值,然后乘以1000。