我希望将一个C#的DateTimeOffset值存储在SQL Server 2005数据库中。
虽然SQL Server 2008内置了这种类型,但是SQL Server 2005没有。
DateTimeOffset结构具有DateTime值,我将其存储为DateTime,并具有Offset属性(TimeSpan类型)。由于这是相对于UTC的时区,因此它通常是整小时或半小时。
有关如何在SQL Server 2005数据库中最佳存储此数据的建议?
我希望将一个C#的DateTimeOffset值存储在SQL Server 2005数据库中。
虽然SQL Server 2008内置了这种类型,但是SQL Server 2005没有。
DateTimeOffset结构具有DateTime值,我将其存储为DateTime,并具有Offset属性(TimeSpan类型)。由于这是相对于UTC的时区,因此它通常是整小时或半小时。
有关如何在SQL Server 2005数据库中最佳存储此数据的建议?
假设一个偏移量是几个小时或半个小时并不是一个好主意 - 当然有一些以15分钟为单位的时区。
使用毫秒表示偏移量可能是最灵活的,但我认为以分钟为单位更容易阅读。如果你将来需要查看数据库中的“原始”数据,理解值60 = 1小时比理解3600000更容易。我无法想象你真正需要偏移量的分钟分数。
将所有的DateTimeOffsets标准化为一个常见的偏移量,最好是UTC。然后像往常一样存储DateTime。在提取时,恢复偏移量,它应该是一个常量。这不会保留原始偏移量,但偏移量对于时区来说是模糊的。
如果您实际上需要知道日期/时间的起源,则需要存储一些时区信息。这是因为简单的偏移量无法明确表示时间的起源。请参阅(有点令人困惑的)MSDN文档关于DateTime、DateTimeOffset和TimeZoneInfo之间的选择。
将日期时间存储为日期时间类型,偏移量以毫秒为单位(bigint)