2

我只想知道是否可以将 DateTime 类型用于 45:00(45 分钟)或 120:00(120 分钟)等持续时间。这些值也需要存储到本地 Sql Server 数据库中。如果可能的话,任何人都可以暗示如何使用日期时间来完成,或者如果不是让我知道一种可以使用不同类型完成的方法。

提前谢谢你,杰米

4

4 回答 4

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数据类型

于 2013-04-17T22:03:35.800 回答
1

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

于 2013-04-17T22:03:48.987 回答
0

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

于 2013-04-17T22:04:03.643 回答
0

这只是一个解释问题。SQL Server 将日期时间存储为两个四字节整数。一个是从参考日期算起的有符号整数天数,另一个是无符号时间,因此 32 位精确映射 24 小时。如果没有隐式纪元,这不是日期时间,而是持续时间。没有什么能阻止你以这种方式解释它。

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

就我个人而言,我不喜欢将“天”作为时间单位。我们这个星球的自转周期不是恒定的,为了维持每天有86400秒的假象,就必须搞乱闰秒。更好的选择是 SI 单位,第二个单位是根据可重复的、不变的物理常数定义的。

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

我说皮秒是因为这是适合 64 位同时包含有用的时间跨度(50,000 年)的最佳划分。Femto 适合,但 50 年还不够宽。我知道最终会出现 5 万年的问题,但坦率地说,我怀疑除了考古学家之外的任何人都会关心 5 万年前的记录。

于 2013-04-17T23:28:24.637 回答