Python timedelta在减法中的表现
这个问题的起源是我在看到一个关于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
这和t1(23:30:00 PM)和t2(00:15:30 AM)之间的持续时间
是一样的,假设t2在t1之后
我的问题是,既然td1是从前一天的午夜到23:30:00 PM的持续时间,而td2是从那天的午夜到00:15:30 AM的持续时间,那么它们的差值怎么能代表t2和t1之间的持续时间呢?
能不能请一些Python高手来解释一下?
1 个回答
12
timedelta
代表的不是从午夜开始的时间,而是一个时间的长度。
如果我做某件事情花了三小时,然后又减去四小时,那么结果就是负一小时。
这两个 timedelta
之间的差就是负一天加上45分钟。
这和负23小时15分钟是一样的。
15分钟减去23小时30分钟的结果是负23小时15分钟。