当我在python中减去两个datetime对象时,它只考虑了时间而不是一天

当我在python中减去两个datetime对象时,它只考虑了时间而不是一天,python,datetime,Python,Datetime,我有两个日期时间对象 `statrt_time` and `end_time` 我的代码是 if self.book_from and self.book_to: fmt = '%Y-%m-%d %H:%M:%S' s = datetime.strptime(self.book_from,fmt) #start date e = datetime.strptime(self.book_to,fmt) #end date

我有两个日期时间对象

`statrt_time` and `end_time`
我的代码是

if self.book_from and  self.book_to:
        fmt = '%Y-%m-%d %H:%M:%S'
        s = datetime.strptime(self.book_from,fmt)   #start date
        e = datetime.strptime(self.book_to,fmt)   #end date
        diff = e - s

        total_seconds=diff.seconds
        time_diff = (total_seconds/3600.0)
        no_of_units = (time_diff/4)
        if(e<s):
            self.units = 0
        else:
            self.units = math.ceil(no_of_units)
如果self.book\u from和self.book\u to:
fmt=“%Y-%m-%d%H:%m:%S”
s=datetime.strtime(self.book_from,fmt)#开始日期
e=datetime.strtime(self.book_to,fmt)#结束日期
diff=e-s
总秒数=差异秒数
时间差=(总秒数/3600.0)
单位数量=(时间差/4)
如果(e使用而不是

timedelta.seconds
仅显示差异的“秒”部分,而
total_seconds()
以秒为单位显示差异的持续时间。有关详细信息,请参阅

因此,请使用以下命令:

total_seconds=diff.total_seconds()

total_seconds
是一个对象,它使用三个字段存储两个日期时间之间的差异-
days
seconds
milisonds
。您的代码片段只使用
seconds
属性,而不是整个差异。该方法会为您处理这些差异,并返回总的numb值两个数据时间间隔的秒数。

我有另一种方法……但有一个解决办法

if self.book_from and  self.book_to:
    fmt = '%Y-%m-%d %H:%M:%S'
    s = datetime.strptime(self.book_from,fmt)   #start date
    e = datetime.strptime(self.book_to,fmt)   #end date
    diff = e - s
    days=diff.days// convert difference to day instead of seconds//
    days_seconds=0
    if(days>0): //Checking whether the difference exceeds a day//
        days_seconds=days*24*3600 //If so convert it to seconds//

    total_seconds=diff.seconds+days_seconds
    time_diff = (total_seconds/3600.0)

如果在小时内没有差异,此方法将给出真正的差异,因为本质上您只是在测量日部分和第二部分的差异。哦,对不起,是的,它会起作用,因为timedelta只在日和秒中存储差异。因此在内部,
total_seconds()
方法正在执行您在这里所做的操作。