поведение Python Timedelta на вычитание - PullRequest
8 голосов
/ 17 августа 2011

Этот вопрос возник, когда я наткнулся ( в другой ветке ) об экземплярах Python datetime и timedelta

Я проследил за обновлением jimgardener и прочитал комментарии eyquem, ипопробовал некоторый код на Python .. Я плохо понимаю, как все работает здесь (из-за статуса новичка в Python) .. Я подумал, что было бы правильно задать новый вопрос

import datetime
#for t1=23:30:00 PM
t1 = datetime.time(23,30,00)

#for t1=00:15:30 AM
t2 = datetime.time(0,15,30)

td1 = datetime.timedelta(hours=t1.hour,minutes = t1.minute,seconds=t1.second)

td2 = datetime.timedelta(hours=t2.hour,minutes = t2.minute,seconds=t2.second)

#substarcting timedeltas
tdiff = td2-td1

печатьэти переменные дали

td1 ==> datetime.timedelta(0, 84600)
td1.seconds ==> 84600

td2 ==> datetime.timedelta(0, 930)
td2.seconds ==> 930

tdiff ==> datetime.timedelta(-1, 2730)

Когда я посмотрел на эти результаты, я заметил, что

td1.seconds (ie 84600) is equivalent to 
84600/60 ==> 1410 minutes
1410/60 ==> 23.5 hours
or in short,td1 represents the duration **from previous midnight** to 23:30 PM

сейчас,

td2.seconds (ie 930) is equivalent to
930/60 ==> 15.5 minutes or 15 minutes and 30 seconds
which means td2 represents the duration from **that midnight**
 to 00:15:30 AM

при рассмотрении tdiff, я обнаружил, что

tdiff ==> timedelta(-1,2730)
tdiff.seconds ==> 2730
tdiff.seconds/60 ==>45 minutes

это то же самое, что и duration between t1(23:30:00 PM) and t2(00:15:30 AM) при условии, что t2 следует за t1

Мой вопрос такой, поскольку td1 - это длительность с предыдущей полуночи *С 1028 * до 23:30:00 PM и td2 - это продолжительность с этой полуночи до 00:15:30 AM, как их разница может представлять продолжительность между t2 и t1?

Можетнекоторые гуру питона объясняют

1 Ответ

8 голосов
/ 17 августа 2011

timedelta s не представляют время с полуночи, просто количество времени .

Если бы мне потребовалось три часа минус четыре часа , чтобы сделать что-то, мне потребовалось бы отрицательный час .

Разница между двумя timedelta с минус один день плюс 45 минут .

Это то же самое, что минус 23 часа и 15 минут .

15 минут минус 23 часа и 30 минут равно отрицательно 23 часа и 15 минут .

...