我需要在 UTC 时间生成一个 UNIX 时间戳,所以我time.time()
用来生成它。
我是否需要做任何其他事情,或者时间戳是否自动采用 UTC?
2 回答
从技术上讲,time.time()
并没有指定,实际上,至少在 CPython 中,它以底层标准 C 库time
函数使用的任何格式返回时间戳。
C 标准(不是免费提供的)没有说明这是否是 GMT,POSIX 标准也没有。它只是说:
该
time()
函数应返回自纪元以来的时间值(以秒为单位)。
......没有说任何关于时区的事情,除了你可以将它传递给localtime
或gmtime
获取本地或 GMT 时区的“分解时间”。
因此,这是特定于平台的。一个平台可以返回任何它想要的东西time
,只要它以一种可以正常工作的方式这样localtime
做gmtime
。
话虽如此,它通常是 GMT——或者更确切地说是 UTC (Windows) 或 UTC-except-for-leap-seconds(大多数其他平台)。例如,FreeBSD说:
该
time()
函数返回自 1970 年 1 月 1 日协调世界时 0 小时 0 分 0 秒以来的时间值,以秒为单位,不包括闰秒。
OS X 和大多数其他 *BSD 具有相同的联机帮助页,Windows和linux/glibc也专门返回 UTC(带或不带闰秒)等。
此外,Python 文档说:
要了解时代是什么,请查看
gmtime(0)
.
time
将其与和的定义放在一起,gmtime
平台返回本地时间戳比 GMT 要做的工作要多得多。(话虽这么说,这个声明并不是那么权威,因为对于任何 POSIX 平台来说,这实际上并不完全正确,这要归功于闰秒。)
time.time()
返回自 epoch 以来的秒数,因此它没有定义使用哪个时间标准或区域。
使用以下方法转换为时间标准:
time.localtime([secs])
- 由您的操作系统定义的本地时间time.gmtime([secs])
- 世界标准时间
他们都返回一个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)