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

时间:2008-10-12 15:34:28

标签: c# sql-server-2005 datetimeoffset

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

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

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

有关如何最好地将其存储在SQL Server 2005数据库中的建议?

3 个答案:

答案 0 :(得分:7)

假设偏移是一个小时或半小时并不是一个好主意 - 周围肯定有四分之一小时的时区。

使用毫秒作为偏移可能是最灵活的,但我认为分钟更容易阅读。如果您要查看数据库中的“原始”数据,则更容易理解60 = 1小时的值而不是3600000.我无法想象你真的需要几分钟的分数作为偏移量。

答案 1 :(得分:4)

将所有DateTimeOffsets标准化为公共偏移量,最好是UTC。然后像往常一样存储DateTime。在提取时恢复偏移量,该偏移量应该是常数。这不会保留原始偏移,但无论如何偏移对时区都是模糊的。

如果您确实需要知道日期/时间来源,那么您需要存储一些时区信息。这是因为简单的偏移不能明确地表示时间的起源。有关Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo的详细信息,请参阅(有些令人困惑的)MSDN文档。

答案 2 :(得分:1)

将datetime存储为datetime,将偏移量存储为milliseconds(bigint)