Python的time.time()是否以UTC格式返回时间戳?

时间:2013-05-15 00:27:21

标签: python time utc

我需要以UTC时间生成UNIX时间戳,因此我使用time.time()来生成它。
我是否需要做任何其他事情,或者自动生成UTC时间戳?

2 个答案:

答案 0 :(得分:20)

从技术上讲,time.time()没有指定,实际上,至少在CPython中,它返回基础标准C库的time函数使用的任何格式的时间戳。

C标准(不可免费提供)并未说明这是否是GMT,POSIX standard也没有。它只是说:

  

time()函数应返回自纪元以来的秒数。

...没有说出任何关于时区的内容,只是您可以将其传递给localtimegmtime以获得本地或GMT时区的“分解时间”。

所以,这是特定于平台的。平台可以返回time所需的任何内容,只要它能够使localtimegmtime正常工作。

话虽这么说,通常将是GMT,或者更确切地说,是UTC(Windows),或UTC-except-for-leap-seconds(大多数其他平台)。例如,FreeBSD说:

  

time()函数返回自0小时0分0秒1970年1月1日协调世界时以来的时间值,不包括闰秒。

OS X和大多数其他* BSD具有相同的联机帮助页,Windowslinux/glibc也专门返回UTC(有或没有闰秒)等。

此外,Python文档说:

  

要了解时代的内容,请查看gmtime(0)

将其与timegmtime的定义结合起来,平台返回本地时间戳比GMT要多得多。 (话虽这么说,这个声明不可能都是权威的,因为对于任何POSIX平台来说实际上都不是这样,这要归功于闰秒。)

答案 1 :(得分:7)

time.time()返回秒since epoch,因此它不会定义正在使用的时间标准或区域。

使用以下方式转换为时间标准:

他们都返回time.struct_time

>>> t = time.time()
>>> time.localtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=2, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=1)
>>> time.gmtime(t)
time.struct_time(tm_year=2013, tm_mon=5, tm_mday=15, tm_hour=0, tm_min=41, tm_sec=49, tm_wday=2, tm_yday=135, tm_isdst=0)