我所有的时间都在UTC时区现在我需要以某种方式将其转换为用户时区(我也将它存储在数据库中并使用Windows时区的ID)。
如何在SQL Server 2005中执行此操作?
修改
所以我尝试做扩展存储过程但是使用Timezoneinfo我得到了这个错误
部署错误SQL01268:.Net SqlClient 数据提供者:Msg 6503,Level 16, 国家12,第1行大会 'system.core,version = 3.5.0.0, 培养=中性 公钥= b77a5c561934e089“。是 在SQL目录中找不到。一个 批处理时发生错误 被执行。
如果我把那条线拿出来我可以部署它。任何想法如何解决这个问题?
答案 0 :(得分:0)
SQL Server不提供简单 将UTC日期时间值转换为的方法 当地时间价值。
但是,the page that is from包括:
表(tbTimeZoneInfo) 数据提供时区 信息和两个功能 将UTC日期时间值转换为任何值 当地时区。
答案 1 :(得分:0)
只为你写这个:
DECLARE @UTCDate DateTime /* Replace with the UTC datetime stored in your table */
DECLARE @LocalDate DateTime
DECLARE @TimeZoneOffset int /* Replace with the offset stored in your table */
SET @TimeZoneOffset = -8 /* PST */
SET @UTCDate = GETUTCDATE()
SET @LocalDate = DATEADD(Hour, @TimeZoneOffset, @UTCDate)
SELECT @UTCDate
SELECT @LocalDate
如果它不起作用,请告诉我。
答案 2 :(得分:0)
由于SQL Server不提供对此的开箱即用支持,您可以考虑编写一个使用.Net TimeZoneInfo object的.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.");
}
<强> [编辑] 强>
答案 3 :(得分:0)
SQL Server 2008将具有DATETIMEOFFSET
数据类型(包括时区)以及SWITCHOFFSET
等函数,以便从一个时区偏移切换到另一个时区偏移。
但在2005版本中,对时区的支持并不多。
你有可能很快升级吗?
答案 4 :(得分:0)
我使用这个功能:
CREATE FUNCTION fnConvertGMTToLocalTime
(
@GMTValue Datetime,
@TimeZoneOffset int
)
RETURNS DateTime
AS
BEGIN
DECLARE @LocalTime dateTime
SELECT @LocalTime = DateAdd(Hour, @TimeZoneOffset, @GMTvalue)
RETURN @LocalTime
END
它不考虑夏令时...但我不需要那样。