Результат зависит от часового пояса, который соответствует входным временным строкам.
Самый простой случай, если обе даты используют одинаковое смещение utc:
#!/usr/bin/env python3
from datetime import datetime, timedelta
time_format = "%Y-%d-%m %H:%M:%S"
dt1 = datetime.strptime("2010-01-01 17:31:22", time_format)
dt2 = datetime.strptime("2010-01-03 17:31:22", time_format)
print((dt2 - dt1) // timedelta(minutes=1)) # minutes
Если ваша версия Python не поддерживает td // timedelta
; замените его на int(td.total_seconds() // 60)
.
Если входное время находится в местном часовом поясе, который может иметь различное смещение utc в разное время, например, оно имеет летнее время, тогда вы должны * dt1
, dt2
включить в осведомленные объекты даты и времени, прежде чем найти разницу учитывать возможные изменения в смещении utc.
Переносимый способ создания локальных объектов даты и времени - это использование pytz
часовых поясов:
#!/usr/bin/env python
from datetime import timedelta
import tzlocal # $ pip install tzlocal
local_tz = tzlocal.get_localzone() # get pytz timezone
aware_dt1, aware_dt2 = map(local_tz.localize, [dt1, dt2])
td = aware_dt2 - aware_dt1 # elapsed time
Если либо dt1
, либо dt2
соответствуют неоднозначному времени, тогда для устранения неоднозначности используется значение по умолчанию is_dst=False
. Вместо этого вы можете установить is_dst=None
, чтобы вызвать исключение для неоднозначных или несуществующих локальных времен.
Если вы не можете установить сторонние модули, то из ответа @Ken Cochrane можно использовать time.mktime()
, который может найти правильное смещение utc на некоторых платформах для некоторых дат в некоторых часовых поясах - если вы не требуется согласованного (но, возможно, ошибочного) результата, тогда это гораздо лучше, чем делать dt2 - dt1
с наивными объектами datetime, которые всегда терпят неудачу, если соответствующие смещения utc различаются.