gpt4 book ai didi

python - 如何在 django 模板中减去两个 datetime.time 值,以及如何将持续时间格式化为小时、分钟

转载 作者:太空狗 更新时间:2023-10-29 22:06:00 27 4
gpt4 key购买 nike

在 django 应用程序中,我将 Entry 对象列表发送到模板。每个 Entry 对象都有一个开始时间和结束时间,它们是 datetime.time 值(来自表单上的 TimeFields。在列出 Entry 对象时,我需要显示每个条目的持续时间。在模型中放置持续时间字段似乎是多余的,因为开始和结束时间已经存在

模型

class Entry(models.Model):
title = models.CharField(unique=True,max_length=50)
starttime=models.TimeField(null=True)
endtime=models.TimeField(null=True)
...

模板

{% for entry in object_list %}
<tr>
<td> {{entry.title}} </td>
<td> {{entry.starttime}}</td>
<td> {{entry.endtime}}</td>
<td> want to show duration here </td>
{%endfor %}

1.是否有任何过滤器可以采用两个 datetime.time 值并计算持续时间(以秒为单位)。即,

given
t1=datetime.time(2,30,50) and
t2=datetime.time(3,00,50)
should show
30 minutes

2.此外,是否有一个过滤器,如果分钟值大于 60,则可以将给定分钟数的持续时间显示为小时、分钟

即,

if duration is 50 minutes ==> 50 minutes
if duration is 150 minutes ==> 2 hours,30 minutes

更新

def diff_in_time(start,end):
startdelta=datetime.timedelta(hours=start.hour,minutes=start.minute,seconds=start.second)
enddelta=datetime.timedelta(hours=end.hour,minutes=end.minute,seconds=end.second)
return (enddelta-startdelta).seconds/60

当我尝试使用一些采样时间值时,它给了我预期的结果

#start 11:35:00 pm
#end 00:05:00 am
start= datetime.time(23,35,00)
end = datetime.time(00,05,00)
print diff_in_time(start,end)

==> 30 minutes

#start 00:35:00 am
#end 01:35:00 am
start= datetime.time(00,35,00)
end = datetime.time(01,35,00)
print diff_in_time(start,end)

==>60 minutes

最佳答案

你有问题。你不能——也不应该——比较两次。晚上 11 点是在凌晨 1 点之前还是之后?这取决于他们是否在同一天。

您需要将它们存储为 datetime 或代表相对绝对时间的其他内容,或者您​​需要像这样将它们转换为 datetime:

def todatetime(time):
return datetime.datetime.today().replace(hour=time.hour, minute=time.minute, second=time.second,
microsecond=time.microsecond, tzinfo=time.tzinfo)

def timestodelta(starttime, endtime):
return todatetime(endtime) - todatetime(starttime)

如果 today 的两次调用跨越午夜,这将无法给出预期的答案。

那么您可能应该将此应用程序用于 DurationField其中存储了一个timedelta,将结果存入数据库,方便显示。

关于python - 如何在 django 模板中减去两个 datetime.time 值,以及如何将持续时间格式化为小时、分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065761/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com