我只想知道是否可以将 DateTime 类型用于 45:00(45 分钟)或 120:00(120 分钟)等持续时间。这些值也需要存储到本地 Sql Server 数据库中。如果可能的话,任何人都可以暗示如何使用日期时间来完成,或者如果不是让我知道一种可以使用不同类型完成的方法。
提前谢谢你,杰米
我只想知道是否可以将 DateTime 类型用于 45:00(45 分钟)或 120:00(120 分钟)等持续时间。这些值也需要存储到本地 Sql Server 数据库中。如果可能的话,任何人都可以暗示如何使用日期时间来完成,或者如果不是让我知道一种可以使用不同类型完成的方法。
提前谢谢你,杰米
您应该使用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
数据类型
我将持续时间以秒为单位存储在数据库中,然后在显示数据时转换为 HH:MM:SS 格式。
你为什么不TimeSpan
改用?您可以将它们转换为Ticks
(int),将它们存储在数据库中,并在需要该值时反转过程。
这只是一个解释问题。SQL Server 将日期时间存储为两个四字节整数。一个是从参考日期算起的有符号整数天数,另一个是无符号时间,因此 32 位精确映射 24 小时。如果没有隐式纪元,这不是日期时间,而是持续时间。没有什么能阻止你以这种方式解释它。
当然,选择一个单位并简单地使用浮点数会更方便。这就是 Windows 所做的,将日期时间存储为从参考日期算起的天数,以 8 字节浮点数(双精度)表示。
就我个人而言,我不喜欢将“天”作为时间单位。我们这个星球的自转周期不是恒定的,为了维持每天有86400秒的假象,就必须搞乱闰秒。更好的选择是 SI 单位,第二个单位是根据可重复的、不变的物理常数定义的。
更好的是皮秒,因为我们可以转储双精度并使用 int64,具有所有伴随的算术和比较性能优势。以混合人体尺度单位 (yyyy mmm d HH:mm:ss) 进行描述已经是一种试验。当前使用小数天的映射函数可以轻松地缩放到微秒,尽管必须重写闰秒和闰日的补偿。
我说皮秒是因为这是适合 64 位同时包含有用的时间跨度(50,000 年)的最佳划分。Femto 适合,但 50 年还不够宽。我知道最终会出现 5 万年的问题,但坦率地说,我怀疑除了考古学家之外的任何人都会关心 5 万年前的记录。