【问题标题】:Handling and storing elapsed time处理和存储经过时间
【发布时间】:2010-09-10 06:17:54
【问题描述】:

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

我有一个应用程序,它有一个文本框,允许用户以 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


    【解决方案1】:

    TimeSpan 有一个您可以存储的 Int64 Ticks 属性,以及一个采用 Ticks 值的 constructor

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 为您提供的跨平台解决方案点赞,独立于任何编程语言或特定于数据库数据类型; )
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-01-05
                  • 1970-01-01
                  • 2015-05-06
                  • 2013-05-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-07-01
                  相关资源
                  最近更新 更多