从SQL 2005 Server访问TimeZoneInfo

use*_*207 8 sql sql-server asp.net clr timezone

.NET TimeZoneInfo类非常棒,我认为它可以解决我在SQL 2005数据库中记录来自多个时区的数据的所有问题.

要将数据库中的UTC日期时间转换为任何其他时区,我只需使用TimeZoneInfo.FindSystemTimeZoneById()将时区转换为TimeZoneInfo类,然后调用TimeZoneInfo.ConvertTimeFromUtc().辉煌!我只是从SQL .NET CLR中调用它!

但是...... TimeZoneInfo的主机保护属性为MayLeakOnAbort.

当我使用VS 2008创建SQL函数或存储过程时,我甚至看不到system.TimeZoneInfo类永远不会使用它.我还假设即使我可以以某种方式引用TimeZoneInfo类,如果我尝试在SQL Sever 2005中注册程序集,我可能会得到某种安全性异常.

救命!有没有办法从SQL Server 2005访问TimeZoneInfo类及其所有的财富?

注意:我刚刚在第一个答案后添加了这个警告:

我们在世界各地都有网站.我们需要在数据库中存储本地时间和UTC时间,以防止可能需要在站点级别进行趋势分析的事件.趋势可能包括一年超过52,000个数据点,因此,为了提高效率,我不能只在数据库中存储UTC时间并转换客户端上的每个数据点.因此,我需要能够在DB内将任何时区的本地时间转换为UTC时间和从UTC时间转换.

Mat*_*ell 1

我不知道是否可以从 SQL 访问 TimeZoneInfo 类,但通常认为最好的做法是在数据库中坚持使用 UTC,并由客户端将其转换为本地时间。

因此,每次写入数据库时​​,都会从本地时间转换为 UTC,每次从数据库读取时,都会从 UTC 转换为本地时间。

编辑:根据我对问题的理解,我仍然推荐的解决方案是:

1) 将 UTC 日期存储在数据库中。2)计算客户端本地时间。

2 可以通过多种方式完成。推荐的方法是在 DataColumn 类 (*) 中将 DateTimeMode 设置为 Local(或 Utc)。如果您需要本地时间的报告,请使用 Local,如果您需要 UTC 时间的报告,请使用 UTC。

(*) 请注意,Visual Studio 中的设计器存在问题,请参阅博客文章:http://bethmassi.blogspot.com/2006/01/serializing-data-across-time-zones-in.html,错误报告:http ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=96118