将timedelta转换为总秒数

rip*_*234 156 python datetime

我有时差

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1
Run Code Online (Sandbox Code Playgroud)

现在,我如何找到通过的总秒数?diff.seconds不计算天数.我可以:

diff.seconds + diff.days * 24 * 3600
Run Code Online (Sandbox Code Playgroud)

有没有内置的方法?

小智 326

使用timedelta.total_seconds().

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0
Run Code Online (Sandbox Code Playgroud)

  • python 2.7中的新功能 (25认同)
  • 如果有人仍然需要与2.6兼容:请参阅http://stackoverflow.com/questions/3318348/how-can-i-extend-pythons-datetime-datetime-with-my-own-methods/14214646#14214646了解如何用自己的方法扩展datetime.timedelta. (7认同)
  • python 3 中的“(time2-time1).total_seconds()” (4认同)
  • Python3.6中的datetime.timedelta.total_seconds(time2-time1) (2认同)

Joh*_*hin 7

你的datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))表达方式有这样或那样的问题 .

(1)如果你需要的只是两个瞬间的差异,time.time()那么这个工作非常简单.

(2)如果你将这些时间戳用于其他目的,你需要考虑你在做什么,因为结果有很大的气味:

gmtime()返回UTC中的时间元组,但mktime()期望在当地时间的时间元组.

我在澳大利亚墨尔本,标准TZ是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
Run Code Online (Sandbox Code Playgroud)

您会注意到t3,您的表达式的结果是UTC + 1,它似乎是UTC +(我的本地DST差异)......不是很有意义.datetime.datetime.utcnow()当DST开启/关闭时,你应该考虑使用哪个不会跳过一个小时,并且可能比你提供更精确的time.time()