Python рассчитывает разницу во времени, чтобы дать "годы, месяцы, дни, часы, минуты и секунды в 1
Я хочу знать, сколько лет, месяцев, дней, часов, минут и секунд между "2014-05-06 12:00:56" и "2012-03-06 16:08:22". Результат будет выглядеть так: "разница составляет ххх год ххх месяц ххх дней ххх часов ххх минут"
Например:
import datetime
a = '2014-05-06 12:00:56'
b = '2013-03-06 16:08:22'
start = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(b, '%Y-%m-%d %H:%M:%S')
diff = start – ends
если:
diff.days
Это дает разницу в днях.
Что еще я могу сделать? И как я могу достичь желаемого результата?
Ответы
Ответ 1
Используйте relativedelta
из пакета dateutil. Это будет учитывать високосные годы и другие причуды.
import datetime
from dateutil.relativedelta import relativedelta
a = '2014-05-06 12:00:56'
b = '2013-03-06 16:08:22'
start = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(b, '%Y-%m-%d %H:%M:%S')
diff = relativedelta(start, ends)
>>> print "The difference is %d year %d month %d days %d hours %d minutes" % (diff.years, diff.months, diff.days, diff.hours, diff.minutes)
The difference is 1 year 1 month 29 days 19 hours 52 minutes
Возможно, вы захотите добавить некоторую логику для печати, например. "2 года" вместо "2 года".
Ответ 2
diff - это экземпляр timedelta
.
для python2, см.
https://docs.python.org/2/library/datetime.html#timedelta-objects
для python 3, см.
https://docs.python.org/3/library/datetime.html#timedelta-objects
из документов:
атрибуты экземпляра timdelta (только для чтения):
методы экземпляра timdelta:
атрибуты класса timdelta:
Вы можете использовать атрибуты экземпляра days
и seconds
, чтобы рассчитать, что вам нужно.
например:
import datetime
a = '2014-05-06 12:00:56'
b = '2013-03-06 16:08:22'
start = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(b, '%Y-%m-%d %H:%M:%S')
diff = start - ends
hours = int(diff.seconds // (60 * 60))
mins = int((diff.seconds // 60) % 60)