7

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

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

所以我计划解析这个字符串,在冒号上标记它并为我的业务逻辑创建 TimeSpan(或使用 TimeSpan.Parse() 并在 mm:ss 案例中添加一个“00:”)。好的?

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

4

8 回答 8

9

TimeSpan 有一个您可以存储的 Int64 Ticks属性,以及一个采用 Ticks 值的构造函数。

于 2008-09-17T17:01:48.043 回答
3

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

于 2008-09-17T16:59:47.940 回答
3

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

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

于 2008-09-17T17:01:00.463 回答
0

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

于 2008-09-17T17:01:19.573 回答
0

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

于 2008-09-17T17:01:25.860 回答
0

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

于 2008-09-17T17:02:11.880 回答
0

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

于 2008-09-17T17:02:27.497 回答
0

int 类型应该这样做,将其存储为秒并来回解析

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

于 2008-09-17T17:02:44.953 回答