Конвертировать 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
есть ли встроенный метод для этого?
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