一尘不染

如何在SQL Server 2005中转换时区?

sql

我所有的时间都在UTC时区,现在我需要以某种方式将其转换为用户时区(我也将其存储在数据库中,并使用Windows时区的ID)。

如何在SQL Server 2005中做到这一点?

编辑

所以我试图做那个扩展的存储过程,但是用Timezoneinfo我得到了这个错误

部署错误SQL01268:.Net SqlClient数据提供程序:消息6503,级别16,状态12,行1程序集’system.core,version
= 3.5.0.0,culture = neutral,publickeytoken = b77a5c561934e089。’
在SQL目录中找不到。执行批处理时发生错误。

如果我把那条线拿出来,我可以部署它。任何想法如何解决这个问题?


阅读 141

收藏
2021-05-16

共1个答案

一尘不染

由于SQL Server对此不提供开箱即用的支持,因此您可以考虑编写一个使用.Net
TimeZoneInfo对象
的.Net
dll存储过程,该对象考虑了包括DST在内的所有规则。此类允许您将时间也从一个区域转换为另一个区域。我希望这有帮助。

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.", 
           hwTime, 
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian STandard Time zone has been corrupted.");
}
2021-05-16