2015-10-13 3 views
1

Я хочу добавить свой часовой пояс с помощью функции GETUTCDATE() в SQL Server. Я несколько раз искал, но не нашел подходящего решения. Заранее спасибо.GETUTCDATE() и часовой пояс (SQL Server)

+0

Вместо 'GETUTCDATE' используйте [SYSDATETIMEOFSFSET()] (https://msdn.microsoft.com/en-us/library/bb677334.aspx). Он вернет значение 'datetimeoffset', которое включает смещение часового пояса машины. Если вы хотите переключить это на другое смещение, используйте [SWITCHOFFSET] (https://msdn.microsoft.com/en-us/library/bb677244.aspx) –

ответ

-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') 
+0

Это не переход на летнее время. Зал – Aflred

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 
+0

Все это преобразование в и от varchars и dateadd, не нужно. Просто используйте 'SYSDATETIMEOFFSET' вместо' GETUTCDATE', а 'AT TIME ZONE' преобразуется правильно. –

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'.

Смежные вопросы