繁体   English   中英

从 Django/Python 中的日期时间字段中减去时间

[英]Subtract Time from Datetime Field in Django/Python

这个问题似乎很明显也很简单,但我在这里伸了个懒腰。 问题是我在 model 中有日期时间字段,我想从另一个属性中减去时间。 这是我到目前为止尝试过的代码。

@property
    def boarding_time(self):
        print('---------------------------')
        time = self.schedule.travel_date_time.time()
        print()
        time_added = self.schedule.bus_company_route.routeboardingpoint_set.get(
            point=self.boarding_point
        ).time_added
        time1 = timedelta(hours=time.hour, minutes=time.minute, seconds=time.second)
        time2 = timedelta(hours=time_added.hour, minutes=time_added.minute, seconds=time_added.second)
        return (time1-time2)

我实际上是想找出车辆到达某个目的地的时间延迟。 假设车辆应该在早上 8 点移动,但车辆在早上 8 点 15 分从巴士停车场出发,乘客等待的位置将增加 15 分钟,但我收到错误消息

'datetime.timedelta' object has no attribute 'isoformat'

我不确定这是否能回答您的问题,但您可以尝试:

from datetime import datetime, date

datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)

combine 构建一个可以减去的日期时间。 你可以用谷歌搜索更多... https://docs.python.org/3/library/datetime.html

在高层次上,调整后的登机时间是从预定登机时间加上预定出发时间和从前一个目的地实际出发时间之间经过的时间量得出的。

这是一个简化的示例,希望能够说明关键概念,以帮助您拼凑出解决更复杂问题的解决方案:

from datetime import datetime, timedelta

scheduled_boarding_time = datetime.fromisoformat("2021-01-12T10:00")
departure_delay_in_minutes = 15
adjusted_boarding_time = scheduled_boarding_time + timedelta(minutes=delay_in_minutes)
print(adjusted_boarding_time.isoformat())
2021-01-12T10:15:00

您的问题的解决方案在于您处理时间戳格式的方式。 您的日期时间为AM/PM ,因此您必须相应地设置日期格式。 这是您可以做的事情,而不是您现在正在做的事情

from datetime import datetime
time = '2021/1/13 8:15 am'    #your date format
time_added = '2021/1/13 8:45 am'    #your date format

format = '%Y/%m/%d %H:%M %p' #will format your date for further computation

time = datetime.strptime(time, format)

time
o/p
datetime.datetime(2021, 1, 13, 8, 15)

time_added = datetime.strptime(time_added, format)

time_added
o/p
datetime.datetime(2021, 1, 13, 8, 45)

time2 = time_added-time1 # this will give you time difference in seconds

divmod(time2.total_seconds(), 60)[0] #use this to get difference in minutes
o/p
30.0

您在 function 中返回的相同内容将解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM