我在决定处理和存储时间测量的最佳方法时遇到问题。

我有一个应用程序,它有一个文本框,允许用户以 hh:mm:ss 或 mm:ss 格式输入时间。

因此,我计划解析这个字符串,在冒号上标记它并为我的业务逻辑创建 TimeSpan (或使用 TimeSpan.Parse() 并仅在 mm:ss 情况下添加“00:”)。好的?

我如何将其存储在数据库中?字段类型是什么?日期时间似乎错误。我不希望时间 00:54:12 存储为 1901-01-01 00:54:12 这看起来有点差?

有帮助吗?

解决方案

TimeSpan 有一个 Int64 蜱虫 您可以存储的属性,以及 构造函数 需要一个 Ticks 值。

其他提示

我认为最简单的是将用户输入转换为整数秒。所以 54:12 == 3252 秒,所以将 3252 存储在数据库或任何地方。然后当您需要将其显示给用户时,您可以再次将其转换回来。

对于少于一天的时间,只需像其他人所说的那样使用秒。

对于较长时间,这取决于您的数据库引擎。如果是 SQL Server,2008 之前的版本您需要一个日期时间。没关系 - 您可以忽略默认的 1/1/1900 日期。如果您有幸拥有 sql server 2008,那么您可以使用单独的日期和时间数据类型。使用真实日期时间/时间类型的优点是使用 DateDiff 函数来比较持续时间。

大多数数据库都有某种时间间隔类型。答案取决于您所讨论的数据库。对于 Oracle 来说,它只是一个代表天数(包括小数天数)的浮点 NUMBER。您可以在任何 DATE 类型中添加/减去该值,然后得到正确的答案。

作为秒的整数计数(或适当的毫秒)

您是否同时收集开始时间和停止时间?如果是这样,您可以使用“时间戳”数据类型(如果您的 DBMS 支持)。如果没有,就作为日期/时间类型。现在,您已经说过您不希望存储日期部分 - 但请考虑时间段跨越午夜的情况 - 例如,您从 23:55:01 开始到 00:05:14 结束 - 除非你那里也有日期。有标准内置函数可返回两个日期时间值之间经过的时间(以秒为单位)。

使用整数表示秒或分钟。秒可能更好。你永远不会因为选择过于精确的东西而责备自己。另外,对于您的 UI,请考虑使用多个文本输入,您不必担心用户实际正确输入“:”。添加其他约束(例如包含 0-59 的分和秒值)也更容易。

int 类型应该做到这一点,将其存储为秒并来回解析它

http://msdn.microsoft.com/en-us/library/ms187745.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top