处理和存储经过的时间

问题描述 投票:7回答:8

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

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

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

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

c# database datetime timespan
8个回答
9
投票

TimeSpan具有一个Int64 Ticks属性,您可以代替存储,而constructor具有Ticks值。


3
投票

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


3
投票

对于少于一天的时间,请使用其他人所说的秒。

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


0
投票

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


0
投票

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


0
投票

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


0
投票

使用整数秒或分钟。秒可能更好。您将永远不会因为选择精度过高而自暴自弃。另外,对于您的UI,请考虑使用多个文本输入,而您不必担心用户实际上是否正确键入了“:”。添加其他约束(例如分钟和秒值,包含0-59)也容易得多。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.