python 的 time.time() 方法是如何工作的?
Posted
技术标签:
【中文标题】python 的 time.time() 方法是如何工作的?【英文标题】:How does python's time.time() method work? 【发布时间】:2015-03-05 23:51:03 【问题描述】:time.time() 方法为您提供时间戳,它基本上是自纪元以来经过的时间(以 UTC 为单位)。
datetime.fromtimestamp() 声明如果未提供 tz 参数,则返回本地日期时间对象。
我知道为了获取当地时间,tz 信息基本上被视为 utc 的偏移量。
如果是这样,则必须从平台中提取 UTC 的当前时间。
从底层平台提取的当前时间(无论是本地时间还是 UTC)如何?
【问题讨论】:
我认为它是一个操作系统功能... @thebjorn 如果手动调整系统时钟会发生什么? @farthVader 然后该函数将返回调整后的时间。 你会得到调整后的系统时钟......(你为什么认为你会得到其他东西?)操作系统控制设置时间和时区。 Python/C 只是读取这些值。一般来说,系统没有/没有任何方法可以知道其位置。此外,您不能仅根据经度计算时区(时区不是那么规则)。 是的,操作系统带有一个时区数据库,它会在时区(和 dst 规则)发生变化时更新。 【参考方案1】:在(当前)CPython中time.time()
调用floattime(NULL)
调用_PyTime_gettimeofday_info()
调用pygettimeofday()
其中pygettimeofday()
可以使用GetSystemTimeAsFileTime()
、clock_gettime(CLOCK_REALTIME)
、gettimeofday()
函数,具体取决于平台。
无关:time.time()
returns "seconds since the epoch"。在 Python 支持的大多数系统(Linux、OS X、Windows)上,现在是 POSIX 时间。 POSIX timestamp 不是自 1970-01-01T00:00:00Z
(Epoch) 以来经过的 SI 秒数。虽然它非常接近(从 Epoch 算起在 0.000003% 以内)。它计算非闰 SI 秒数或 UT1(平均太阳)秒数。
UTC 不是相对于 TAI、GPS 时标的线性时标(请参阅the picture)。由于闰秒(UTC 保持在 UT1(地球自转)的 ±0.9 秒内),您将无法获得准确的经过的 SI 秒。另请参阅Is a day always 86,400 epoch seconds long?
某些操作系统可以配置为使用非 POSIX “正确”区域信息。在这种情况下,time.time()
不需要返回 POSIX 时间戳。 “正确”时区计算闰秒,因此“正确”时间戳和 POSIX 时间戳之间的差异不是恒定的,例如,它将在 July 2015 due to the introduction of the positive leap second 中增加。
原则上,“时代”可能与 POSIX 时代不同,尽管 Python doesn't support such systems。
【讨论】:
以上是关于python 的 time.time() 方法是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章