Python 将时间增量转换为总秒数

Python 将时间增量转换为总秒数,python,datetime,Python,Datetime,我有时差 导入时间 导入日期时间 time1=datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) ... time2=datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) 差异=时间2-时间1 现在,我如何找到经过的总秒数差异秒不计算天数。我可以做到: diff.seconds+diff.days*24*3600 是否有一种内置方法用于此?使用 您的datet

我有时差

导入时间
导入日期时间
time1=datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2=datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
差异=时间2-时间1
现在,我如何找到经过的总秒数<代码>差异秒不计算天数。我可以做到:

diff.seconds+diff.days*24*3600
是否有一种内置方法用于此?

使用


您的
datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
表达式存在这样或那样的问题

(1) 如果您只需要以秒为单位计算两个瞬间之间的差值,那么非常简单的
time.time()
就可以完成这项工作

(2)如果你使用这些时间戳做其他用途,你需要考虑你在做什么,因为结果到处都有一个大的气味:

gmtime()
UTC中返回时间元组,但
mktime()
要求在本地时间中返回时间元组。

我在澳大利亚墨尔本,那里的标准时间是UTC+10,但夏时制仍然有效,直到明天早上,所以是UTC+11。当我执行以下命令时,是当地时间2011-04-02T20:31。。。UTC时间是2011-04-02T09:31

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

您会注意到t3,表达式的结果是UTC+1,它似乎是UTC+(我的本地DST差异)。。。不是很有意义。您应该考虑使用“代码> > DATETIME.DATEIME.UTcNoW()/代码>当DST打开/关闭时,它不会跳一个小时,并且可以给您比Time.Time](时间)< /Cult>

< P>您可以使用Mx.DATETIME模块

import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)

获取两个datetime对象之间的差异并将差异转换为秒的更简洁的方法如下所示(Python 3x):


@RestRisiko-你说得对。不过,关于堆栈溢出的问题还是很有用的,所以下次我或其他人在谷歌上搜索时,他会给出一个好的答案作为最重要的结果;在你逃跑之前,请阅读我的答案:)你的代码中的计算
time1
diff
存在多个问题。要将当前utc时间作为原始日期时间对象获取,请改用
datetime.utcnow()
。要了解为什么应该使用UTC而不是本地时间来查找差异,请参阅
time.monotonic()
可以更好地查找事件之间经过的时间(而不是
time.time()
datetime.utcnow()
)。感谢您的澄清。就我现在使用的目的而言,时不时的几个小时的差异并不重要,但我一定会在将来写一些更有意义的东西时检查这一点。如果有人仍然需要与2.6兼容:请参阅如何使用新方法扩展datetime.timedelta.datetime.timedelta.total_seconds(time2-time1)在Python3.6中,这与10年前公认的答案没有什么不同。
import mx.DateTime as mt

t1 = mt.now() 
t2 = mt.now()
print int((t2-t1).seconds)
from datetime import datetime
        
time1 = datetime.strftime('18 01 2021', '%d %m %Y')
    
time2 = datetime.strftime('19 01 2021', '%d %m %Y')

difference = time2 - time1

difference_in_seconds = difference.total_seconds()