Python的time.time()返回本地或UTC时间戳吗?

Python时间模块中的time.time()是否返回系统时间或UTC中的时间?

time.time()函数返回自纪元以来的秒数,以秒为单位。 请注意,“纪元”定义为1970年1月1日开始的UTC。 所以这个时代是用UTC来定义的,并且build立了一个全球时间。 无论你在哪里“秒历”(time.time())同时返回相同的值。

以下是我在电脑上运行的一些示例输出,并将其转换为string。

 Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import time >>> ts = time.time() >>> print ts 1355563265.81 >>> import datetime >>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') >>> print st 2012-12-15 01:21:05 >>> 

tsvariables是以秒为单位返回的时间。 然后我使用datetime库将它转换为一个string,使它成为一个人类可读的string。

这是可以在文本文件中使用的时间戳的文本格式。 (问题的标题在过去是不同的,所以对这个答案的介绍已经改变,以澄清如何解释这个问题。[更新2016-01-14])

您可以使用datetime.datetime.now().utcnow() .now()将时间戳记作为string获取:

 >>> import datetime >>> print datetime.datetime.utcnow() 2012-12-15 10:14:51.898000 

now和预期的不一样,否则它们的工作方式是一样的:

 >>> print datetime.datetime.now() 2012-12-15 11:15:09.205000 

您可以显式地将时间戳显示为string:

 >>> str(datetime.datetime.now()) '2012-12-15 11:15:24.984000' 

或者,您可以更明确地按照您喜欢的方式格式化时间戳:

 >>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p") 'Saturday, 15. December 2012 11:19AM' 

如果您需要ISO格式,请使用对象的.isoformat()方法:

 >>> datetime.datetime.now().isoformat() '2013-11-18T08:18:31.809000' 

您可以将这些variables用于计算和打印,而无需转换。

 >>> ts = datetime.datetime.now() >>> tf = datetime.datetime.now() >>> te = tf - ts >>> print ts 2015-04-21 12:02:19.209915 >>> print tf 2015-04-21 12:02:30.449895 >>> print te 0:00:11.239980 

基于#squiguy的答案,为了得到一个真正的时间戳,我会input从浮动。

 >>> import time >>> ts = int(time.time()) >>> print(ts) 1389177318 

至less这是这个概念。

答案可能不是或两者兼而有之。

  • 两者都不是: time.time()大致返回自Epoch以来经过的秒数。 结果不依赖于时区,所以它既不是UTC也不是本地时间。 这是POSIX定义为“从时代起秒” 。

  • 两个: time.time()不要求你的系统时钟是同步的,所以它反映了它的值(尽pipe它与本地时区没有任何关系)。 不同的电脑可能同时得到不同的结果。 另一方面,如果您的计算机时间同步的,那么很容易从时间戳得到UTC时间(如果我们忽略闰秒):

     from datetime import datetime utc_dt = datetime.utcfromtimestamp(timestamp) 

关于如何从各个Python版本的UTC时间获取时间戳,请参阅如何根据UTC将时间转换为自时代以来的秒数?

在特定的时区里没有这样的“时代”。 时代被定义为一个特定的时刻,所以如果你改变时区,时间本身也会改变。 具体来说,这个时间是Jan 1 1970 00:00:00 UTC 。 所以time.time()返回自纪元以来的秒数。

我最终解决了:

 >>> import time >>> time.mktime(time.gmtime()) 1509467455.0