【发布时间】:2012-07-22 23:07:46
【问题描述】:
我需要跟踪用户的时区,以便可以在他们指定的特定时间(在他们自己的时区)处理他们的信息(或不处理)。
显而易见的答案是将时区与他们的个人资料信息一起存储在用户数据库中。有点棘手的是夏令时。从下图中可以看出,大多数北部和南部地区都使用日光时间偏移。因此,存储时区偏移量并不像它会起作用,因为该偏移量可能会在一年中发生变化。相反,我正在考虑存储时区代码(类似于 PST)并让标准时间库查找偏移量。
所以我正在考虑的几件事是:
1) TSQL 是否有用于从时区代码 (PST) 转换为当前 UTC 偏移量的库? 2) 我知道.net can do this,但我更愿意在数据库中执行此操作,因为我的查询将在此处运行。
【问题讨论】:
-
我注意到 TSQL 有一个“SWITCHOFFSET”函数,可以从给定的偏移量(比如 -00:00)转换为其他时区偏移量(比如 -08:00)。然而,该函数假定偏移“是夏令时感知和调整的”,因此这并不能真正帮助动态找到 DTS 调整的偏移值。 [1]msdn.microsoft.com/en-us/library/bb677244.aspx
-
我的经验是 TSQL 不会针对时区进行调整。有一篇关于使用 CLR 和 SQL 获得正确时间的好帖子。
-
@Blam 好主意,使用 CLR 函数。我一直在考虑在共享托管 SQL 环境中使用它,所以我不确定它们是否支持 CLR 函数。我开始认为使用 TSQL 执行此操作的唯一方法是使用时区表。 en.wikipedia.org/wiki/Tz_database