Конвертировать timedelta в общее количество секунд



у меня есть разница во времени



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


есть ли встроенный метод для этого?

558   3  

3 ответов:

использовать timedelta.total_seconds().

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

у вас возникла проблема так или иначе с 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

вы заметите, что T3, результат вашего выражения UTC+1, который, кажется, UTC + (моя локальная разница DST) ... не очень осмысленно. Вы должны рассмотреть возможность использования datetime.datetime.utcnow() который не будет прыгать на час, когда DST включается / выключается и может дать вам больше точности, чем time.time()

вы можете использовать mx.Модуль DateTime

import mx.DateTime as mt

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

Comments

    Ничего не найдено.