使用DateTime持续一段时间,例如45:00

时间:2013-04-17 22:01:13

标签: c#

我只想知道是否可以在45:00(45分钟)或120:00(120分钟)之间使用DateTime类型。这些值也需要存储在本地Sql Server DB中。如果有可能,任何人都可能暗示如何使用Datetime完成此操作,或者如果不是让我知道可以使用其他类型完成的方式。

提前谢谢你, 杰米

4 个答案:

答案 0 :(得分:9)

您应该使用TimeSpan结构

TimeSpan interval = new TimeSpan(0, 45, 0);
Console.WriteLine(interval.ToString());  

对于数据库存储部分,您可以存储属性Ticks,因为TimeSpan结构的特定构造函数允许实例​​化传递Ticks值的新TimeSpan

long ticks = GetTimeSpanValueFromDb();
TimeSpan interval = new TimeSpan(ticks);

我还想补充一点,您需要一个BIGINT T-SQL数据类型字段来存储long NET数据类型

答案 1 :(得分:1)

我在数据库中以秒为单位存储持续时间,然后在显示数据时转换为HH:MM:SS格式。

答案 2 :(得分:0)

为什么不使用TimeSpan?您可以将它们转换为Ticks(int),将它们存储在数据库中,并在需要该值时反转该过程。

答案 3 :(得分:0)

这仅仅是一个解释问题。 SQL Server将datetime存储为两个四字节整数。一个是从参考日期开始的带符号的int天数,另一个是未签名的时间,因此32位完全映射24小时。没有隐含的时代,这不是一个日期时间,它是一个持续时间。没有什么能阻止你以这种方式解释它。

当然,选择一个单位并简单地使用一个浮标会更方便。这就是Windows所做的,将日期时间存储为参考日期的天数,表示为8字节的浮点数(双精度)。

就个人而言,我不喜欢“天”作为时间单位。我们星球的旋转周期不变,有必要用闰秒来搞乱,以保持每天有86400秒的错觉。更好的选择是SI单位,第二个,它是根据可重复的,不变的物理常数定义的。

更好的是皮秒,因为我们可以转储双精度并使用int64,具有所有伴随的算术和比较性能优势。混合人体单位(yyyy mmm d HH:mm:ss)的描述已经是一个试验。目前使用小数天的映射函数可以简单地缩放到微秒,尽管必须重写闰秒和闰天的补偿。

我说皮秒是因为这是最好的分区,适合64位,同时包含有用的时间跨度(5万年)。 Femto适合,但五十年不够广泛。我知道最终有一年50K的问题,但坦率地说,我怀疑任何人,但考古学家会关心5万年前的记录。