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