GETUTCDATE()和时区(SQL Server)

时间:2015-10-13 11:44:00

标签: sql-server database

我想在SQL Server中使用函数GETUTCDATE()添加我的时区。我搜索过几次,但没有找到任何相关的解决方案。提前谢谢。

4 个答案:

答案 0 :(得分:1)

仅适用于sql 2016 ,它会考虑夏令时。

CREATE FUNCTION GetBelgiumTime 
(
)
RETURNS datetime2
AS BEGIN  
       declare @dateoffset datetimeoffset
       SET  @dateoffset = convert(VARCHAR(2000),(SELECT GETUTCDATE() AT TIME ZONE  'Central European Standard Time'),126 )


       declare @date datetime2
       set @date = convert(datetime2, LEFT(@dateoffset,28),126)

    set @date = DATEADD(HOUR, convert(int,LEFT(RIGHT(@dateoffset,5), 2)), @date) 
       RETURN @date
END

select  dbo.GetBelgiumTime() as BelgiumDateAndTime 

答案 1 :(得分:0)

从SQL Server 2016转发(和Azure SQL DB),您可以这样做:

SELECT SYSDATETIMEOFFSET() AT TIME ZONE @tz

其中@tz是有效的Windows时区标识符,例如'Pacific Standard Time''Central European Standard Time'等。

但是,如果您使用的是旧版本的SQL Server,或者更喜欢使用IANA时区标识符,则可以使用我的SQL Server Time Zone Support项目执行以下操作:

SELECT Tzdb.UtcToLocal(GETUTCDATE(), @tz)

其中@tz是IANA标准时区名称,例如'America/Los_Angeles''Europe/Budapest'

答案 2 :(得分:0)

使用GETDATE()代替GETUTCDATE()。看到这个link

答案 3 :(得分:-1)

您可以尝试使用switchoffset,如下所示:

select switchoffset(CAST(myDate as datetimeoffset),'+05:30')  from someTable

您可以指定时区值,而不是'+05:30'

如果您想将时区与GETUTCDATE()一起使用,那么只需像这样添加

select cast(GETUTCDATE() as varchar(20)) + '+5:30'

如果您想将其保留为日期

select  switchoffset(CAST(GETUTCDATE() as datetimeoffset),'+05:30')