在SQL Server 2005数据库中存储c#DateTimeOffset值

本文关键字:存储 c#DateTimeOffset 数据库 SQL Server 2005 | 更新日期: 2023-09-27 17:48:49

我想在SQLServer2005数据库中存储一个c#DateTimeOffset值。

Sql 2008将其作为内置类型,但Sql Server 2005没有。

DateTimeOffset结构有一个DateTime值,我将其存储为DateTime,一个Offset属性(类型为TimeSpan)。由于这是相对于UTC的时区,因此推测它通常为整小时或半小时。

关于如何最好地将其存储在SQLServer2005数据库中的建议?

在SQL Server 2005数据库中存储c#DateTimeOffset值

假设偏移量是几个小时或半小时是不好的——周围肯定有四分之一小时的时区。

使用毫秒作为偏移可能是最灵活的,但我认为分钟更容易阅读。如果你打算查看数据库中的"原始"数据,那么60=1小时比3600000更容易理解。我无法想象你真的需要几分钟作为补偿。

将所有DateTimeOffsets规格化为通用偏移量,最好是UTC。然后像往常一样存储DateTime。提取后恢复偏移量,偏移量应为常数。这不会保留原始偏移量,但偏移量对时区来说是不明确的。

如果你真的需要知道日期/时间来源,那么你需要存储一些时区信息。这是因为一个简单的偏移量不能明确地表示时间的原点。请参阅有关在DateTime、DateTimeOffset和TimeZoneInfo之间选择的MSDN文档(有些令人困惑)。

将日期时间存储为日期时间,将偏移量存储为毫秒(bigint)