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

杰米,提前谢谢你

===============>>#1 票数: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数据类型

===============>>#2 票数:1

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

===============>>#3 票数:0

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

===============>>#4 票数:0

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

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

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

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

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

  ask by Jamie Mclaughlan translate from so

未解决问题?本站智能推荐: