处理和存储经过的时间

时间:2008-09-17 16:56:09

标签: c# database datetime timespan

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

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

因此,我计划解析此字符串,在冒号上对其进行标记并创建TimeSpan(或使用TimeSpan.Parse(),并在mm:ss情况下添加“00:”)以用于我的业务逻辑。 OK?

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

8 个答案:

答案 0 :(得分:8)

TimeSpan具有可以存储的Int64 Ticks属性,以及带有Ticks值的constructor

答案 1 :(得分:3)

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

答案 2 :(得分:3)

对于不到一天的时间,只需使用其他人所说的秒数。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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