python time.time()和"夏令时"

时间:2015-09-09 00:51:52

标签: python time save dst

运行python的计算机时钟(Windows或Linux)会发生什么 自动更改并拨打电话time.time()

我已经读过,当时钟手动更改为某个值时,time.time()的值会更小。

2 个答案:

答案 0 :(得分:2)

引用docs for time.time

  

虽然此函数通常会返回非递减值,但它可以   如果系统时钟已经返回,则返回比先前调用更低的值   在这两个电话之间回过头来。

根据平台情况调整系统时钟的值。但是,根据评论,不应包含基于DST的更改,因为Python支持的所有操作系统都提供系统调用以检索UTC中的当前时间(而DST仅影响本地时间与UTC的关联方式) )。

如果这不是一个足够好的保证,你可能更喜欢time.montonic,保证永远不会倒退 - 但是,请注意它附带了这个警告(并决定这是否对你的用例很重要) :

  

返回值的参考点未定义,因此仅限于此   连续调用结果之间的差异是有效的。

答案 1 :(得分:1)

time.time()返回底层库返回的值。 Python使用time(..)gettimeofday(.., nullptr)(取决于系统上可用的内容)。

https://github.com/python-git/python/blob/master/Modules/timemodule.c#L874

在这两种情况下都会返回UTC。 E.g:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html

  

time()函数应返回自Epoch

以来以秒为单位的时间值

在Matt的有效评论之后,我必须添加epoch的定义,该定义明确指出time返回UTC时间。

  

<强>历元:   从历史上看,UNIX系统时间的起源被称为   &#34; 00:00:00 GMT,1970年1月1日&#34;。格林威治标准时间实际上不是一个   国际标准界承认的一词;因此,   这个术语,&#34; Epoch&#34;,用于缩写对实际的引用   标准,协调世界时。

为了证明这个时代是相同的检查:

import time
a = time.gmtime(secs=0)
# time.struct_time(tm_year=2015, tm_mon=9, tm_mday=9, tm_hour=1, tm_min=3, tm_sec=28, tm_wday=2, tm_yday=252, tm_isdst=0)
b = time.localtime(secs=0)
# time.struct_time(tm_year=2015, tm_mon=9, tm_mday=9, tm_hour=3, tm_min=1, tm_sec=28, tm_wday=2, tm_yday=252, tm_isdst=1)

如果参数time.time()为0,则两个函数都使用从secs返回的值。在我的情况下,tm_isdst对于localtime设置为true,对于gmtime设置为false(表示自纪元以来的时间。)

编辑:您在哪里读到该值会更小?