2015-09-08 34 views
1

我想将GETUTCDATE()调用转换为使用时区字符串(如'东部标准时间')或位于注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones下的任何时区字符串的时区。有没有办法做到这一点,或者我冒险进入SQLCLR领域?SQL将GETUTCDATE转换为像'东部标准时间'那样的nvarchar时区

当前的建议,我已经看到了:

print CONVERT(datetime2, DATEADD(HOUR, -4, GETUTCDATE())) 

输出:

2015-09-08 15:22:50.5000000 

我想看看这个与DST合作。

是这样的可能吗?

print CONVERT(datetime2, DATEADD(HOUR, 'Eastern Standard Time', GETUTCDATE())) 

我有SQL Server 2012 Standard可以使用。有什么建议么?先谢谢你!

回答

1

你需要检查出DATETIMEOFFSET datatype这是一个日期时间数据类型,包括那个时区。

此外,还有一个function called SWITCHOFFSET它允许您将给定的DATETIMEOFFSET切换到另一个时区。

有了这两条,你可以这样做:

DECLARE @CurrentDateTime DATETIMEOFFSET 

SELECT @CurrentDateTime = SYSDATETIMEOFFSET() 

DECLARE @OtherDateTime DATETIMEOFFSET 

SELECT @OtherDateTime = SWITCHOFFSET(@CurrentDateTime, `-05:00') 
+0

谢谢marc_s的评论。我将使用这种数据类型。这让我非常接近!我需要的最后一部分是'-05:00'是'太平洋标准时间'之类的东西。我已经存储了该字符串值(任何timezone LIKE'太平洋标准时间'),并希望摆脱寻找静态值。 – Cactuar167

+0

@ Cactuar167:我不认为SQL Server对此有任何内置支持。您可能需要自己创建一个查找表,其中包含像“Pacific Standard Time”这样的明文时区,并跟踪该时区的时间偏移量,以便通过SWITCHOFFSET‖使用该时间偏移量。 –

+1

再次感谢marc_s,这很有帮助! – Cactuar167

相关问题