Python 3时间:两个时间戳之间的秒差

Python 3时间:两个时间戳之间的秒差,python,time,timestamp,Python,Time,Timestamp,我有两个时间戳字符串。我想在几秒钟内找出它们之间的区别 我试过: from time import gmtime, strptime a = "Mon 11 Dec 2017 13:54:36 -0700" b = "Mon 11 Dec 2017 13:54:36 -0000" time1 = strptime(a, "%a %d %b %Y %H:%M:%S %z") time2 = strptime(b, "%a %d %b %Y %H:%M:%S %z") time1-time2

我有两个时间戳字符串。我想在几秒钟内找出它们之间的区别

我试过:

from time import gmtime, strptime
a = "Mon 11 Dec 2017 13:54:36 -0700"
b = "Mon 11 Dec 2017 13:54:36 -0000"

time1 = strptime(a, "%a %d %b %Y %H:%M:%S %z")
time2 = strptime(b, "%a %d %b %Y %H:%M:%S %z")

time1-time2
获取错误:TypeError:不支持的操作数类型-:“time.struct\u time”和“time.struct\u time”

那么,如何使用打包时间计算差异呢


在下面的代码中,我成功地使用了包datetime,但我想我读到datetime忽略闰年中的秒,或者类似的东西。因此,我试图使用“时间”:

from datetime import datetime
time1 = datetime.strptime(a, "%a %d %b %Y %H:%M:%S %z")
time2 = datetime.strptime(b, "%a %d %b %Y %H:%M:%S %z")
dif = time1 - time2
print(int(dif.total_seconds()))

多谢各位

首先,您使用的是,它返回
,不支持减法运算符,实现所需的一种可能方法是转换为datetime:

from datetime import datetime
from time import mktime
from time import gmtime, strptime

a = "Mon 11 Dec 2017 13:54:36 -0700"
b = "Mon 11 Dec 2017 13:54:36 -0000"

time1 = strptime(a, "%a %d %b %Y %H:%M:%S %z")
time2 = strptime(b, "%a %d %b %Y %H:%M:%S %z")

print(datetime.fromtimestamp(mktime(time1))-datetime.fromtimestamp(mktime(time2)))
或者更好的是,使用它,这样您就不需要中间转换

有关datetime支持的操作的更详细说明,请参阅文档中的
支持的操作
。特别是其中的一节:

如果两者都知道并且具有不同的tzinfo属性,则a-b的行为就如同 a和b首先转换为原始UTC日期时间。结果 is(a.replace(tzinfo=None)-a.utcoffset())-(b.replace(tzinfo=None) -b.utcoffset()),但实现从不溢出


在任何情况下,也许你最好的机会是考虑一种替代方法,如本

“但我认为我读到datetime忽略闰年中的秒数”,你在哪里读到的?我想它可能会忽略闰秒,这是偶尔添加的,没有真正的模式,但这可能不会有什么关系。对不起,你是对的-它忽略了闰秒,我认为这应该给你一些insight@user3245256:如果您关心闰秒,则
时间
模块不会做得更好<代码>时间和
日期时间
使用相同的底层系统时间信息。另请参见,为了简单起见,大多数闰秒都被忽略,特别是因为如果不使用增量来计算未来的时间戳,则保证包含尚未通知的闰秒。闰秒是在只提前6个月通知的情况下添加的,在处理datetimes为更远的未来建模时,您无法以任何有意义的方式对其进行解释。@user3245256是的,上面的代码向您展示了如何使用datetime的
-
运算符,如您所见,它将忽略字符串的最后一部分
a
b
。尝试将b更改为类似于
b=“Mon 11 Dec 2017 13:54:31-0000”
的值,这样您就可以观察到差异。抱歉,我不确定我是否理解。我的b就是它。结果应相差7小时,以秒表示。