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

Does Python's time.time() return a timestamp in UTC?

本问题已经有最佳答案,请猛点这里访问。

我需要在UTC时间生成一个UNIX时间戳,所以我使用time.time()来生成它。
我还需要做其他任何事情,还是自动生成UTC时间戳?


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

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

The time() function shall return the value of time in seconds since the Epoch.

...没有说任何关于时区的事情,除了你可以将它传递给localtimegmtime以获得本地或GMT时区的"分解时间"。

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

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

The time() function returns the value of time in seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time, without including leap seconds.

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

此外,Python文档说:

To find out what the epoch is, look at gmtime(0).

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


time.time()返回自纪元以来的秒数,因此它不定义正在使用的时间标准或区域。

转换为时间标准使用:

  • time.localtime([secs]) - 操作系统定义的本地时间
  • time.gmtime([secs]) - UTC

它们都返回time.struct_time

1
2
3
4
5
>>> 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)