减法时的python timedelta行为

Dam*_*ian 9 python datetime 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
Run Code Online (Sandbox Code Playgroud)

打印出这些变量

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

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

tdiff ==> datetime.timedelta(-1, 2730)
Run Code Online (Sandbox Code Playgroud)

当我看到这些结果时,我注意到了

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
Run Code Online (Sandbox Code Playgroud)

现在,

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
Run Code Online (Sandbox Code Playgroud)

当检查tdiff时,我发现了

tdiff ==> timedelta(-1,2730)
tdiff.seconds ==> 2730
tdiff.seconds/60 ==>45 minutes
Run Code Online (Sandbox Code Playgroud)

这与duration between t1(23:30:00 PM) and t2(00:15:30 AM) 假设t2跟随t1相同

我的问题是,因为td1是从午夜 到晚上23:30:00的持续时间,而td2是从午夜 到00:15:30的持续时间,它们的差异如何表示t2和t1之间的持续时间?

有些python大师可以解释一下

agf*_*agf 10

timedelta■不要从午夜表示时间,只是一个时间量.

如果我花了三个小时减去四个小时来做某事,那我需要一个小时.

两者之间的差异timedelta负一天加上45分钟.

这与负23小时15分钟相同.

15分钟减去23小时30分钟负23小时15分钟.

  • 请记住,`timedelta`s实际上只能在'days`字段中为负数,并且没有'hours`字段,因此只有一种方法可以用timedelta表示时间量. (4认同)
  • 如果我说"我从一天前的45分钟开始吃早餐",那就像说"我在23小时15分钟前吃早餐"一样. (2认同)