Python时间模块中的time.time()返回的是系统时间还是UTC时间?
time.time()
time.time()函数返回自epoch以来的秒数,作为浮点数。注意"的时代"定义为UTC时间1970年1月1日的开始。因此,epoch是根据UTC来定义的,并建立了一个全局时间点。无论你在地球上的哪个角落,“时光流逝”;(time.time())在同一时刻返回相同的值。
下面是我在计算机上运行的一些示例输出,并将其转换为字符串。
>>> import time >>> ts = time.time() >>> ts 1355563265.81 >>> import datetime >>> datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') '2012-12-15 01:21:05' >>>
ts变量是以秒为单位返回的时间。然后,我使用datetime库将其转换为人类可读的字符串。
ts
datetime
这是用于可以在文本文件中使用的时间戳的文本形式。(这个问题的标题在过去是不同的,所以这个答案的介绍被改变了,以澄清它如何解释为时间。[2016-01-14]更新)
你可以使用datetime.datetime中的.now()或.utcnow()来获取时间戳:
datetime.datetime
.now()
.utcnow()
>>> import datetime >>> print datetime.datetime.utcnow() 2012-12-15 10:14:51.898000
now和utcnow不一样,否则它们的工作方式是一样的:
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()方法:
.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
根据来自#squiguy的答案,为了获得一个真实的时间戳,我将从float类型转换它。
>>> import time >>> ts = int(time.time()) >>> print(ts) 1389177318
至少这是一个概念。
答案可能是两者都不是,也可能都是。
都不是:time.time()返回从Epoch开始经过的大约秒数。结果不依赖于时区,所以它既不是UTC也不是本地时间。这里是POSIX定义为"Seconds Since the Epoch"。
both: time.time()不需要系统的时钟同步,所以它反映了它的值(尽管它与本地时区无关)。不同的计算机在同一时间可能得到不同的结果。另一方面,如果您的计算机时间是已同步,那么很容易从时间戳中获得UTC时间(如果我们忽略闰秒):
from datetime import datetime utc_dt = datetime.utcfromtimestamp(timestamp)
On how to get timestamps from UTC time in various Python versions, see How can I get a date converted to seconds since epoch according to UTC?
在特定的时区里没有所谓的“epoch”。epoch被定义为一个特定的时间点,因此如果您改变了时区,时间本身也会改变。具体来说,这次是Jan 1 1970 00:00:00 UTC。因此,time.time()返回自epoch以来的秒数。
Jan 1 1970 00:00:00 UTC
我最终决定:
>>> import time >>> time.mktime(time.gmtime()) 1509467455.0
时间戳总是utc的时间,但是当你调用datetime.datetime.fromtimestamp时,它会返回你本地时区对应的时间,所以结果取决于你的语言环境。
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时区的时间对象。
arrow
>>> 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]>
要使用datetime库获取本地时间戳,请使用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)
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'))