将timedelta转换为总秒数
我有一个时间差
import time
import datetime
time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1
现在,我该怎么计算总共经过了多少秒呢?diff.seconds
这个方法不包括天数。我可以这样做:
diff.seconds + diff.days * 24 * 3600
有没有什么现成的方法可以做到这一点?
6 个回答
1
下面展示了一种更简洁的方法来计算两个日期时间对象之间的差异,并将这个差异转换成秒(适用于Python 3x):
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()
12
你在使用 datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
这个表达式时遇到了一些问题。
(1) 如果你只需要计算两个时间点之间的秒数,简单的 time.time()
就可以搞定。
(2) 如果你打算把这些时间戳用在其他地方,就需要仔细考虑一下,因为结果可能会让你感到困惑:
gmtime()
返回的是一个以 协调世界时(UTC) 表示的时间元组,而 mktime()
则需要一个以 本地时间 表示的时间元组。
我在澳大利亚的墨尔本,这里的标准时区是 UTC+10,但因为现在还在夏令时,所以是 UTC+11。当我执行以下操作时,这里是2011年4月2日晚上8:31的本地时间……而UTC时间是2011年4月2日早上9: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 加上(我本地的夏令时差)……这并没有什么实际意义。你应该考虑使用 datetime.datetime.utcnow()
,这样在夏令时切换时就不会出现一小时的跳动,并且可能比 time.time()
提供更精确的结果。
628
使用 timedelta.total_seconds()
这个方法。
>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0