Django - 排除日期时间范围结束时间

时间:2014-01-23 15:19:59

标签: python django datetime

我做了一个表单,允许用户添加由日期时间范围组成的absences

datetime range editor

我将时间设置为可选,因此他们可以将2014-01-23设置为2014-01-24

但由于最终存储的值为2014-01-23 00:00:002014-01-24 00:00:00,因此此范围实际上仅涵盖第23个。很可能用户希望我们考虑2014-01-25 00:00:00而不是结束。

以这种方式存储这些日期时间是一个好主意吗?

如果未设置结束时间,我应该自动增加结束日期吗?


更新

按照@MartijnPieters的建议,这里是我检查的方式end_time是空的

def clean_end_time(self):
    end_dt = self.cleaned_data.get('end_time', None)
    if end_dt.time().min == end_dt.time():
        return datetime.combine(end_dt, end_dt.time().max)
    return self.cleaned_data.get('end_time', None)

唯一的小问题是,用户无法有意选择00:00end_time

1 个答案:

答案 0 :(得分:3)

如果未设置时间,则将结束时间设置为23:59:59.999999

现在,您的日期时间范围从2014-01-23 00:00:002014-01-24 23:59:59.999999,在2014-01-25之前1微秒(不是范围的一部分)。

您可以使用datetime.time.max提供此值:

end = datetime.datetime.combine(datetime.date(2014, 1, 24), datetime.time.max)