Python时间模块中的time.time()
是否返回系统的时间或UTC时间?
答案 0 :(得分:701)
time.time()
函数返回自纪元以来的秒数,以秒为单位。请注意,“epoch”定义为1970年1月1日UTC的开头。因此,时代是以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
库将其转换为字符串,使其成为人类可读的字符串。
答案 1 :(得分:280)
这适用于可在文本文件中使用的文本形式的时间戳。 (问题的标题在过去是不同的,所以对这个答案的介绍进行了修改,以澄清它如何被解释为时间。[更新2016-01-14])
您可以使用.now()
的{{1}}或.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'
如果您想要ISO格式,请使用对象的>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
方法:
.isoformat()
您可以在变量中使用它们进行计算和打印而无需转换。
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
答案 2 :(得分:121)
根据#squiguy的回答,为了得到一个真正的时间戳,我会从float中输入它。
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
至少这是概念。
答案 3 :(得分:25)
答案可能不是或两者兼而有之。
都不是:time.time()
大约返回自纪元以来经过的秒数。结果不依赖于时区,因此既不是UTC也不是本地时间。这是POSIX defintion for "Seconds Since the Epoch"。
两者:time.time()
不需要同步系统的时钟,因此它反映了它的值(尽管它与本地时区无关)。不同的计算机可能同时获得不同的结果。另一方面,如果您的计算机时间 同步,则很容易从时间戳获得UTC时间(如果我们忽略闰秒):
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
关于如何从各种Python版本的UTC时间获取时间戳,请参阅How can I get a date converted to seconds since epoch according to UTC?
答案 4 :(得分:3)
我最终选择了:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
答案 5 :(得分:2)
在特定时区中没有“时代”这样的东西。时代被明确定义为特定时刻,因此如果您更改时区,时间本身也会发生变化。具体来说,这个时间是Jan 1 1970 00:00:00 UTC
。所以time.time()
返回自纪元以来的秒数。
答案 6 :(得分:2)
时间戳始终是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]>
答案 7 :(得分:2)
要使用日期时间库,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)
答案 8 :(得分:0)
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'))