gpt4 book ai didi

python - 如何获得日期之间的差距?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:14 24 4
gpt4 key购买 nike

我正在制作一个应用程序,您可以在其中将任务分配给某人。

class Task(models.Model):
TASK_CHOICES = (
('Task_1', 'Task_1'),
('Task_2', 'Task_2'),
('Task_3', 'Task_3'),
)
Person = models.ManyToManyField(Person, blank=True, null=True)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
task = models.CharField(max_length=500, choices=TASK_CHOICES)

def __str__(self):
return '%s' % self.task

我的问题是:如何获取未分配给任何任务的第一个日期?

如您所见,2013-10-16 未分配给任何任务,我想获取该日期。

enter image description here

到目前为止,我尝试做一些查询集。

filtered_tasks = Task.objects.filter(person='HereHere', start_date_gte='2013-10-10').order_by('start_date')

然后制作一个元组列表。

date_tuples = [(d.start_date, d.end_date) for d in filtered_tasks] 得到:

[(datetime.datetime(2013,10,10), datetime.datetime(2013,10,15),
(datetime.datetime(2013,10,17), datetime.datetime(2013,10,23),
(datetime.datetime(2013,10,24), datetime.datetime(2013,10,31)
]

如您所见,task2 start_datetask1 end_date 之间存在间隔。我被困在这里,我不知道如何告诉 Python 获取未分配任务的日期 (16.10)

最佳答案

在计算机中处理日期时,最好使用 closed-open notation .换句话说,第一个日期或日期时间是实际的开始,但结束被列为不包含在集合中的第一个日期时间。换句话说,您的数据可能如下所示:

data = [(datetime.datetime(2013,10,10), datetime.datetime(2013,10,16)),
(datetime.datetime(2013,10,17), datetime.datetime(2013,10,24)),
(datetime.datetime(2013,10,24), datetime.datetime(2013,11,1))
]

一旦您的数据采用封闭-开放表示法,那么您只需要获得结束日期减去开始日期的间隔:

for i, d in enumerate(data):
if i > 0:
if d[0] - data[i-1][1] > datetime.timedelta(0):
print("Gap")

如果您不想更改为使用关闭-打开,只需检查间隔是否大于 1 天,但这会开始给您带来麻烦。

如果您使用的是 postgres 9.2+,您可能需要考虑使用范围类型,因为它们使数据库内部的这些东西变得容易。

关于python - 如何获得日期之间的差距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32190290/

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