Python calculando diferença de tempo, para dar ‘anos, meses, dias, horas, minutos e segundos’ em 1

Eu quero saber quantos anos, meses, dias, horas, minutos e segundos entre ‘2014-05-06 12:00:56’ e ‘2012-03-06 16:08:22’. O resultado deve ser: “a diferença é xxx ano xxx mês xxx dias xxx horas xxx minutos”

Por exemplo:

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 

se eu fizer:

 diff.days 

Dá a diferença em dias.

O que mais eu posso fazer? E como posso alcançar o resultado desejado?

Use um relativedelta do pacote dateutil . Isso levará em conta anos bissextos e outras peculiaridades.

 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 

Você pode querer adicionar alguma lógica para imprimir por exemplo “2 anos” em vez de “2 anos”.

diff é uma instância timedelta .

para python2, consulte: https://docs.python.org/2/library/datetime.html#timedelta-objects

para python 3, consulte: https://docs.python.org/3/library/datetime.html#timedelta-objects

de docs:

Atributos da instância timdelta (somente leitura):

  • dias
  • segundos
  • microssegundos

methods de instância timdelta:

  • total_seconds ()

Os atributos da class timdelta são:

  • min
  • máximo
  • resolução

Você pode usar os atributos de instância de days e seconds para calcular o que precisa.

por exemplo:

 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)