应用:Java + ExtJS
有很多不同的实体具有 java.util.Date 类型的属性:startDate 和 iesendDate(endDate 可以为 NULL)。可以选择带或不带时间部分的两个日期(例如,始终保留时间部分,如果未选择则为事件)。例如,像这样:
2010-07-01 00:00:00
当用户没有时间选择 endDate 时,可能会出现问题。例如,期间从 2010 年 7 月 1 日开始,到 1010 年 7 月 4 日结束。现在在数据库中,它的存储方式如下:
startDate="2010-07-01 00:00:00"
endDate="2010-07-04 00:00:00".
因此,该时期似乎在 2010-07-04 的第一秒结束。但正如用户假设的那样,endDate 是隐含的,例如,期间在 2010-07-04 的最后一秒结束。系统中有很多不同时期的日期比较。
在这种情况下如何正确存储结束日期?
我考虑了可能的解决方案,但所有这些似乎都有点错误:
- 要像这样存储结束日期的时间部分:“2010-07-04 23:59:99”。但似乎结束日期不是 24 小时 - 而是(24 小时 - 0.(9) 毫秒),这可能是潜在的问题。时间部分看起来也很丑陋。
- 要修改 ExtJs 组件,它将添加 1 天到用户在持久性阶段选择的日期,并在该日期显示给用户时再次减去 1 天(用户明确设置时间部分的情况除外)。我不喜欢这里有时间部分的日期和没有它的日期被区别对待。
- 例如,仅将开始日期保存为 Date 对象,然后以秒为单位保存期间的长度。这种方法看起来相当不错——但必须重新设计整个应用程序,并且可能不太容易在结束日期上使用不同的比较。
- 只需使用当前的 - 保存不包含时间的非包含结束日期,并且在日期比较期间要非常小心
有人可以解释解决此类问题的最广泛使用的做法吗?