649

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

4

9 回答 9

867

time.time()函数返回自纪元以来的秒数,以秒为单位。请注意,“纪元”定义为 UTC 时间 1970 年 1 月 1 日的开始。因此,时代是根据 UTC 定义的,并建立了一个全球时刻。无论您身在何处,“经过几秒”(time.time())都会在同一时刻返回相同的值。

这是我在计算机上运行的一些示例输出,也将其转换为字符串。

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
>>>

ts变量是以秒为单位返回的时间。然后我使用datetime库将其转换为字符串,使其成为人类可读的字符串。

于 2012-12-15T09:33:42.543 回答
334

这是可以在文本文件中使用的时间戳的文本形式。(问题的标题与过去不同,因此更改了此答案的介绍以阐明如何将其解释为时间。[2016-01-14 更新])

.now()您可以使用以下的或.utcnow()来获取时间戳作为字符串datetime.datetime

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

与预期now不同utcnow- 否则它们的工作方式相同:

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

您可以显式地将时间戳呈现给字符串:

>>> 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'

您可以在变量中使用它们进行计算和打印而无需转换。

>>> 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
于 2012-12-15T10:24:06.267 回答
153

根据#squiguy 的回答,为了得到一个真正的时间戳,我会从浮点数中输入它。

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

至少是这个概念。

于 2013-04-30T12:02:37.907 回答
31

答案可能两者都不是,也可能两者兼而有之。

  • 既不:time.time()返回大约自 Epoch 以来经过的秒数。结果不依赖于时区,因此它既不是 UTC 也不是本地时间。这是"Seconds since the Epoch" 的 POSIX 定义

  • 两者:time.time()不需要同步系统的时钟,因此它反映了它的价值(尽管它与本地时区无关)。不同的计算机可能同时得到不同的结果。另一方面,如果您的计算机时间同步的,那么很容易从时间戳中获取 UTC 时间(如果我们忽略闰秒):

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

关于如何在各种 Python 版本中从 UTC 时间获取时间戳,请参阅如何根据 UTC 将日期转换为自纪元以来的秒数?

于 2013-11-17T20:41:30.983 回答
5

要使用日期时间库获取本地时间戳,Python 3.x

#wanted format: year-month-day hour:minute:seconds

from datetime import datetime

# get time now
dt = datetime.now()
# format it to a string
timeStamp = dt.strftime('%Y-%m-%d %H:%M:%S')

# print it to screen
print(timeStamp)
于 2020-06-14T22:56:14.257 回答
4

我最终安顿下来:

>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
于 2017-10-31T17:32:23.710 回答
3

在特定时区没有“纪元”之类的东西。纪元被明确定义为特定的时间点,因此如果您更改时区,时间本身也会发生变化。具体来说,这次是Jan 1 1970 00:00:00 UTC。所以time.time()返回自纪元以来的秒数。

于 2016-08-20T00:07:43.693 回答
3

时间戳始终是 UTC 时间,但是当您调用datetime.datetime.fromtimestamp 它时,它会返回与此时间戳对应的本地时区中的时间,因此结果取决于您的语言环境。

>>> import time, datetime

>>> time.time()
1564494136.0434234

>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)

存在arrow具有不同行为的不错的库。在同样的情况下,它会返回带有 UTC 时区的时间对象。

>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>
于 2019-07-30T13:52:49.450 回答
1

time.time() 返回 unix 时间戳。您可以使用datetime库来获取本地时间或 UTC 时间。

import datetime

local_time = datetime.datetime.now()
print(local_time.strftime('%Y%m%d %H%M%S'))

utc_time = datetime.datetime.utcnow() 
print(utc_time.strftime('%Y%m%d %H%M%S'))
于 2021-02-19T06:35:06.217 回答