22

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

4

2 回答 2

22

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

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

time()函数应返回自纪元以来的时间值(以秒为单位)。

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

因此,这是特定于平台的。一个平台可以返回任何它想要的东西time,只要它以一种可以正常工作的方式这样localtimegmtime

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

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

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

此外,Python 文档说:

要了解时代是什么,请查看gmtime(0).

time将其与和的定义放在一起,gmtime平台返回本地时间戳比 GMT 要做的工作要多得多。(话虽这么说,这个声明并不是那么权威,因为对于任何 POSIX 平台来说,这实际上并不完全正确,这要归功于闰秒。)

于 2013-05-15T00:36:14.060 回答
9

time.time()返回自 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)
于 2013-05-15T00:36:06.807 回答