You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

datetime.today()相减在Windows与Linux下结果不一致的技术咨询

问题原因及说明

这个差异的核心原因是系统时钟调整机制的不同,尤其是Linux系统可能出现的NTP时间回拨:

  1. datetime.today()的本质
    该方法获取的是系统的本地当前时间,两次调用之间存在微小的时间间隔。如果在这个间隔内系统时钟被NTP服务回拨(比如Linux系统发现时钟快了,直接将时间调回正确值),就会出现第二次调用得到的时间早于第一次的情况,导致时间差为负。

  2. Windows与Linux的差异

    • Windows系统的时钟同步通常采用平滑调整的方式,不会直接回拨时间,因此两次datetime.today()调用的时间几乎总是后一次晚于前一次,差值为0或极小的正timedelta。
    • Linux(包括WSL2)默认的NTP服务可能会进行步进式时间调整,当系统时钟有偏差时直接回拨时间,这就导致第二次调用的时间可能比第一次早,计算出的差值表现为timedelta(days=-1, seconds=86399, microseconds=999986)——这个值等价于-0.000014秒,只是timedelta的格式化方式让它看起来像差了一天。
  3. 验证与解决方法

    • 验证:可以通过打印两次调用的时间戳确认是否存在时间回退:
      from datetime import datetime
      t1 = datetime.today()
      t2 = datetime.today()
      print(t1.timestamp(), t2.timestamp())
      print(t2 < t1)  # 如果为True,说明时间回拨了
      
    • 解决:如果需要不受系统时钟调整影响的时间差计算,应该使用单调时钟,比如time.monotonic():
      import time
      start = time.monotonic()
      # 执行操作
      end = time.monotonic()
      print(f"耗时:{end - start}秒")
      

内容的提问来源于stack exchange,提问作者jmangold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:02:59