Я пишу TimeDiff функцию для вычисления (в секундах) разница во времени между датой 2 Давать времениРассчитайте время дата разница питон
def timediff(time1, time2):
timeformat = '%d%b%Y:%H:%M:%S'
#time1="01MAR2016:07:11:53"
#time2="01MAR2016:16:28:38"
try:
date_object1 = datetime.strptime(time1, timeformat)
date_object2 = datetime.strptime(time2, timeformat)
except ValueError:
print "time1 format: " + repr(time1)
print "time2 format: " + repr(time2)
raise
return abs((date_object2 - date_object1).seconds)
Это, кажется, не взять «месяц, день, год» для расчета. Это дает правильный расчет, если он находится в том же «месяц, дата, год»
>>> t1="01MAR2016:07:11:53"
>>> t2="01MAR2016:16:28:38"
>>> timediff(t1, t2)
33405
Однако с различными «месяц, дата, год», это дает неправильный ответ. Это только вычисляет разницу во времени ~ 18hrs (что дает ~ 65k секунд)
>>> t1="02APR2016:06:43:51"
>>> t2="06APR2016:00:58:03"
>>> timediff(t1, t2)
65652
Или 24ч отличается он дает 0
>>> t1="01MAR2016:07:11:53"
>>> t2="02MAR2016:07:11:53"
>>> timediff(t1, t2)
0
DateTime принимает формат времени I дает
>>> t1="01MAR2016:07:11:53"
>>> t2="02MAR2016:07:11:53"
>>> datetime.strptime(t1, timeformat)
datetime.datetime(2016, 3, 1, 7, 11, 53)
>>> datetime.strptime(t2, timeformat)
datetime.datetime(2016, 3, 2, 7, 11, 53)
Am Я что-то пропустил?
У меня есть другая альтернатива, которая конвертирует дату в секундах. Но все же хотите знать, почему этот метод не работает.
Моя альтернатива
def timediff(time1, time2):
timeformat = '%d%b%Y:%H:%M:%S'
t1 = datetime.strptime(time1, timeformat)
t2 = datetime.strptime(time2, timeformat)
return abs(time.mktime(t1.timetuple()) - time.mktime(t2.timetuple()))
Пример:
>>> t2
'02MAR2016:07:11:53'
>>> t1
'01MAR2016:07:11:53'
>>> timediff(t1,t2)
86400.0
вы используете '.seconds' вместо' .total_seconds () ' –
Вы правы! Спасибо за разъяснение. Не знаю, что есть .total_seconds() – Nogcas