【发布时间】:2010-04-14 10:53:36
【问题描述】:
我们有两个字段from和to(类型为datetime),用户可以在其中存储出差的开始时间和结束时间,例如:
From: 2010-04-14 09:00
To: 2010-04-16 16:30
所以,行程的持续时间是 2 天 7.5 小时。
通常,确切的时间是事先不知道的,所以用户输入的日期没有时间:
From: 2010-04-14
To: 2010-04-16
在内部,这存储为 2010-04-14 00:00 和 2010-04-16 00:00,因为这是大多数现代类库(例如 .net)和数据库(例如 SQL Server)在日期时间结构中存储“仅日期”时所做的事情。通常,这是完全合理的。
然而,当输入2010-04-16 作为to 日期时,用户显然不是的意思是2010-04-16 00:00。相反,用户的意思是2010-04-16 24:00,即计算行程的持续时间应该输出3 days,而不是2 days。
我可以想到一些(或多或少丑陋的)解决这个问题的方法(如果用户没有输入时间组件,请在to 字段的 UI 层添加“23:59”;添加一个特殊的“日期是全天”布尔字段;将“2010-04-17 00:00”存储在数据库中,但如果时间组件为“00:00”,则向用户显示“2010-04-16 24:00”;.. .),各有利弊。由于我认为这是一个相当普遍的问题,我想知道:
- 是否有解决问题的“标准”最佳实践方法?
- 如果没有,您是否遇到过类似的需求,您是如何解决的,该解决方案的优缺点是什么?
【问题讨论】:
-
您是否仅使用这些日期来计算持续时间?如果是这样,那么您可以将
to字段替换为duration,例如x hours y minutes。为此,AFAIK 数据库具有区间数据类型。
标签: database language-agnostic datetime date