Python的time.time()方法如何工作?

5

time.time()方法提供了时间戳,即自纪元以来经过的时间(在UTC中)。

datetime.fromtimestamp()指出,如果未提供tz参数,则返回本地datetime对象。

我知道tz信息基本上被视为与UTC的偏移量,以获取本地时间。

如果是这样,那么当前的UTC时间必须从平台中提取出来。

如何从底层平台中提取当天的当前时间(无论是本地时间还是UTC时间)?


1
我会认为这是一个操作系统功能... - thebjorn
@thebjorn如果有人手动调整了系统时钟,会发生什么? - farthVader
@farthVader,那么该函数将返回调整后的时间。 - Gillespie
1
你会得到微调后的系统时钟......(为什么你会认为你会得到其他东西呢?)操作系统控制设置时间和时区。 Python / C 只读取这些值。一般来说,系统无法知道自己的位置。此外,你不能仅基于经度计算时区(时区并不那么规律)。 - thebjorn
1
是的,操作系统附带一个时区数据库,当时区(和夏令时规则)更改时会进行更新。 - thebjorn
显示剩余4条评论
1个回答

4

在当前的CPython中,time.time()调用
floattime(NULL),该函数调用
_PyTime_gettimeofday_info(),该函数又调用
pygettimeofday(),
其中pygettimeofday()可能会使用GetSystemTimeAsFileTime()clock_gettime(CLOCK_REALTIME)gettimeofday()等函数,具体取决于平台。


无关:time.time()返回“自纪元以来的秒数”。在大多数支持Python的系统(Linux、OS X、Windows)上,它是POSIX时间。 POSIX时间戳不是自1970年01月01日00:00:00Z(Epoch)以来经过的SI秒数。虽然非常接近(从Epoch开始计算误差不超过0.000003%)。它计算的是非闰秒SI秒数或UT1(平太阳)秒数。

UTC相对于TAI、GPS时间轴不是线性的时间刻度(请参见图片)。由于闰秒,您将无法获得准确的经过SI秒数(UTC与UT1(地球自转)之间保持±0.9秒)。另请参阅一天总是86000个epoch秒吗?

一些操作系统可以配置为使用非POSIX的“right”区域信息。在这种情况下,不要求time.time()返回POSIX时间戳。 "right"时区计算闰秒,因此“right”时间戳和POSIX时间戳之间的差异不是恒定的,例如,在2015年7月由于引入了正闰秒,它将增加。
原则上,“纪元”可能与POSIX纪元不同,但Python不支持这样的系统

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接