处理和存储经过的时间

8
我在决定如何处理和存储时间测量方面遇到了问题。
我的应用程序有一个文本框,允许用户以hh:mm:ss或mm:ss的格式输入时间。
所以我计划解析这个字符串,在冒号上进行标记化,并为我的业务逻辑创建TimeSpan(或使用TimeSpan.Parse()并仅在mm:ss情况下添加“00:”)。好吗?
但是,我该如何将其存储在数据库中?字段类型应该是什么?DateTime似乎不正确。我不希望将00:54:12的时间存储为1901-01-01 00:54:12,这似乎有点差劲?
8个回答

9

TimeSpan有一个Int64 Ticks属性,您可以存储它,还有一个构造函数,它接受一个Ticks值。


3

我认为最简单的方法就是将用户的输入转换成整数秒数。例如,54:12相当于3252秒,因此将3252存储在数据库或其他地方。然后,当你需要向用户显示时,可以再次进行转换。


3
对于少于一天的时间段,只需像其他人所说的那样使用秒。对于更长的时间段,这取决于您的数据库引擎。如果是SQL Server,在2008版本之前,您需要一个datetime类型。没关系-您可以忽略它们都具有的默认日期1/1/1900。如果您足够幸运拥有sql server 2008,则可以使用单独的日期和时间数据类型。使用真正的datetime/time类型的优点是可以使用DateDiff函数比较持续时间。

你提供的跨平台解决方案非常棒,独立于任何编程语言或数据库数据类型的限制。👍 - morde

0

大多数数据库都有一些时间间隔类型。答案取决于你所讨论的数据库是哪一个。对于Oracle来说,它只是一个浮点数NUMBER,表示天数(包括小数天数)。您可以将其添加/减去任何日期类型,从而得到正确的答案。


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

0
你是否同时记录了开始时间和结束时间?如果是的话,你可以使用“时间戳”数据类型(如果你的DBMS支持这个类型)。如果不支持,那就用日期/时间类型。现在,你说你不想存储日期部分 - 但考虑一下时间跨越午夜的情况 - 比如你从23:55:01开始,到00:05:14结束 - 除非你也把日期加进去,否则无法得知准确值。有标准内置函数可返回两个日期时间值之间经过的时间数(以秒为单位)。

0

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接