2016-06-20 3 views
1

Я пишу 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 
+3

вы используете '.seconds' вместо' .total_seconds () ' –

+0

Вы правы! Спасибо за разъяснение. Не знаю, что есть .total_seconds() – Nogcas

ответ

5

Вы должны использовать total_seconds() и не seconds:

>>> import datetime 
>>> f = '%d%b%Y:%H:%M:%S' 
>>> t1 = '01MAR2016:07:11:53' 
>>> t2 = '02MAR2016:07:11:53' 
>>> d1 = datetime.datetime.strptime(t1, f) 
>>> d2 = datetime.datetime.strptime(t2, f) 
>>> print(d2-d1) 
1 day, 0:00:00 
>>> print((d2-d1).total_seconds()) 
86400.0 
>>> print((d2-d1).seconds) 
0 
+0

избили меня, чтобы написать ответ, ну, чтобы добавить здесь ссылки на документацию к ['timedelta.seconds'] (https://docs.python.org/2/library/datetime.html# datetime.timedelta.resolution) «Между 0 и 86399 включительно» и ссылка на ['timedelta.total_seconds()'] (https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds) –

Смежные вопросы