如何存储和比较时区敏感时间

时间:2010-04-01 13:49:08

标签: linq-to-sql sql-server-2008 datetime timezone

我有一个数据结构,其中实体的时间存储为int(当天的分钟数),以便进行快速比较。该实体还有一个返回TimeZone表的外键引用,该表包含.NET CLR ID名称及其标准时间/日光时间缩写。

由于此信息存储为时区不敏感 - 我想知道如何在LINQ to SQL中将其转换为UTC DateTime,以便与其他UTC时间进行比较。

要明确此转换必须在服务器端完成,以便我可以在SQL Server而不是客户端上执行过滤。这样做的原因是为了确保我们将DST考虑在支持它的时区。

我正在使用.NET 3.5 SP1和SQL Server 2008。

2 个答案:

答案 0 :(得分:2)

理想情况下,时间应以UTC格式存储在数据库中,并且仅转换为某些本地时区(包括适当的DST因子)以供显示。如果“快速比较”是您的目标,那么尤其为真。

您可能会发现最简单的方法是添加一个包含UTC时间的额外字段,修改客户端以添加此信息,并运行一次性为现有条目计算的脚本。

答案 1 :(得分:2)

我可以存储一个CurrentOffset字段,该字段需要通过脚本进行更新,该脚本将每小时更新一次,以确定上下文偏移量。