我做了一个表单,允许用户添加由日期时间范围组成的absences
。
我将时间设置为可选,因此他们可以将2014-01-23
设置为2014-01-24
但由于最终存储的值为2014-01-23 00:00:00
到2014-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:00
为end_time
答案 0 :(得分:3)
如果未设置时间,则将结束时间设置为23:59:59.999999
。
现在,您的日期时间范围从2014-01-23 00:00:00
到2014-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)