Python';返回本地或UTC时间戳?

Python';返回本地或UTC时间戳?,python,time,timezone,Python,Time,Timezone,Python时间模块中的time.time()是否返回系统时间或UTC时间?该函数返回自历元以来的秒数(以秒为单位)。请注意,“纪元”定义为UTC 1970年1月1日的开始。因此,纪元是用UTC来定义的,它建立了一个全局时间点。无论您在什么位置,“超过历元的秒数”(time.time())都会在同一时刻返回相同的值 下面是我在计算机上运行的一些示例输出,并将其转换为字符串 Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 2012

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

该函数返回自历元以来的秒数(以秒为单位)。请注意,“纪元”定义为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
库将其转换为一个字符串,使其成为人类可读的字符串

这是针对可在文本文件中使用的时间戳的文本形式。(该问题的标题与过去不同,因此对该答案的导言进行了更改,以澄清如何将其解释为时间。[更新日期:2016-01-14])

您可以使用
datetime.datetime
.now()
.utcnow()
以字符串形式获取时间戳:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
现在的
与预期的
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
根据#squiguy的回答,为了得到一个真正的时间戳,我会从float中输入cast

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

至少这是个概念。

答案可能是两者都不是或两者都是

  • 两者都不返回:
    time.time()
    返回自历元以来经过的秒数。结果与时区无关,因此既不是UTC时间,也不是当地时间。给你

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


关于如何在各种Python版本中从UTC时间获取时间戳,请参见

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

我最终决定:

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

时间戳始终是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)
存在具有不同行为的漂亮库
箭头
。在相同的情况下,它返回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]>
导入箭头 >>>现在() >>>arrow.get(time.time())
使用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)
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'))

我想要的是纪元时间…不是日期格式…从我提到的命令时间就可以明显看出。time()好的,没问题。其他人可能需要时间戳来放置文本文件。我是另一个,可能是由于不合理的投票数而重定向到这里。这个问题的格式不正确,而公认的答案对典型的需求有误导性:在最常用的服务器时区中获取人类可读的后缀(比如文件名)。要将时间戳打印为字符串的一部分,请使用以下命令:Python2:
import datetime;打印“%s:My timestamp message”%datetime.datetime.utcnow()
Python3:
import datetime;打印(“%s:我的时间戳消息”%datetime.datetime.utcnow())
datetime.datetime.utcnow()
是错误的。它创建了一个非本地时间的原始日期时间。除非您的本地时间是UTC,否则它将是错误的。改用
datetime.datetime.now(datetime.timezone.utc)
。这将创建一个表示当前时间的时区感知datetime。当datetime基本上为您提供时间戳时,我们为什么要导入时间。只需删除毫秒-
str(datetime.datetime.now()).split('..')[0]
@Alexis Unix epoch的定义非常清楚。它甚至指出了一个Python示例。我不明白你的评论。老实说,我不记得是什么让我这么说的。我一定是误读了什么,我在努力寻找为什么一些测试被打破,而我在法国和美国之间移动,最终发现问题是因为DST,使得一年中这段时间的一周更长。对此表示抱歉,并感谢您指出这一点。这不是“UTC秒数”。“从纪元开始的秒”是一个术语;它不是从某个时间点(历元)起经过的秒数。您可以轻松地将其转换为本地时间(使用tz数据库)和/或UTC时区。顺便说一句,如果您删除
.strftime()
结果(几乎)相同(+/-微秒)。
datetime.utcfromtimestamp(ts)
在UTC时区中创建一个原始日期时间。除非您的系统时间是UTC,否则它将是错误的。(datetime模块中的大多数代码将原始日期时间视为本地时间。)改用
datetime.fromtimestamp(ts,datetime.timezone.utc)
在utc时区中创建时区感知的日期时间。键入时间戳的原因是什么?默认的类型是什么?@Tizzee
type(time.time())
给出了
但是如果您需要比秒更精确的时间,则浮点数是有意义的。@RudiStrydom:Python是stron
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'))