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

5

我希望将一个C#的DateTimeOffset值存储在SQL Server 2005数据库中。

虽然SQL Server 2008内置了这种类型,但是SQL Server 2005没有。

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

有关如何在SQL Server 2005数据库中最佳存储此数据的建议?


相关问题 - https://dev59.com/U3E85IYBdhLWcg3w8IbK - Oded
3个回答

7

假设一个偏移量是几个小时或半个小时并不是一个好主意 - 当然有一些以15分钟为单位的时区。

使用毫秒表示偏移量可能是最灵活的,但我认为以分钟为单位更容易阅读。如果你将来需要查看数据库中的“原始”数据,理解值60 = 1小时比理解3600000更容易。我无法想象你真正需要偏移量的分钟分数。


4

将所有的DateTimeOffsets标准化为一个常见的偏移量,最好是UTC。然后像往常一样存储DateTime。在提取时,恢复偏移量,它应该是一个常量。这不会保留原始偏移量,但偏移量对于时区来说是模糊的。

如果您实际上需要知道日期/时间的起源,则需要存储一些时区信息。这是因为简单的偏移量无法明确表示时间的起源。请参阅(有点令人困惑的)MSDN文档关于DateTime、DateTimeOffset和TimeZoneInfo之间的选择


同意 - 将日期存储为UTC,并仅在向用户呈现时考虑时区和DST偏移量。 - J c
1
我不同意。DateTimeOffset结构(在C#和SQL 2008中)将时间存储为UTC或本地时间+偏移量。将UTC时间+偏移量存储会颠倒这种关系,只会引起混乱。 - Robin Minto

1

将日期时间存储为日期时间类型,偏移量以毫秒为单位(bigint)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接