У меня есть вопрос о преобразовании часового пояса UTC в часовой пояс EST, поскольку я все еще плохо знаком с языком SQL и платформой Azure. В файле журнала я использовал встроенную функцию системы «GetDate ()» в файле журнала, чтобы получить дату / время. Однако при доступе к базе данных Azure в моей SSMS использование встроенной в систему функции (GetDate ()) дает мне дату и время в часовом поясе UTC, что на 4 часа больше, чем в восточном часовом поясе (EST). Я задавал подобный вопрос раньше для преобразования UTC в EST здесь
и @DanGuzman помогли мне исправить мой код. Но этот вопрос больше о преобразовании UTC в EST (учитывая летнее время динамически). Ниже приведен мой код, и я использовал эту ссылку в качестве ссылки. Однако я хотел бы сделать мой код динамичным, чтобы я мог продолжать использовать его и в 2020, и в 2021 году.
Приведенный ниже код работает ТОЛЬКО для 2019 года (поскольку переход на летнее время начинается с 10,2019 марта по 3 ноября 2019 года. В диапазоне дат ниже кода переадресация на один час времени EST в диапазоне летнего времени.
CREATE FUNCTION [dbo].[EST_GetDateTime]
(
-- no parameter
)
RETURNS datetime
AS
BEGIN
DECLARE
@EST datetime,
@StandardOffset int,
@DST datetime, -- Daylight Saving Time
@SSM datetime, -- Second Sunday in March
@FSN datetime -- First Sunday in November
-- get DST Range
set @EST = CAST(DATEADD(hh,-5,GETDATE()) AS DATETIME)
set @StandardOffset = 0
set @SSM = datename(year,@EST) + '0310' -- Set which day daylight saving start (for 2019, March 10)
set @SSM = dateadd(hour,2,dateadd(day,datepart(dw,@SSM)*-1+1,@SSM))
set @FSN = datename(year,@EST) + '1103' -- Set which day daylight saving start (for 2019, March 10)
set @FSN = dateadd(second,-1,dateadd(hour,2,dateadd(day,datepart(dw,@FSN)*-1+1,@FSN)))
-- add an hour to @StandardOffset if @EST is in DST range
if @EST between @SSM and @FSN
set @StandardOffset = @StandardOffset + 1
-- convert to DST
set @EST = CAST(DATEADD(hh,-5+@StandardOffset ,GETDATE()) AS DATETIME)
RETURN @EST
END
GO
Может кто-нибудь дать какие-нибудь предложения, как улучшить мой существующий код (способный работать динамически), чтобы мне не приходилось менять функцию каждый год для настройки экономии дневного света.