ConvertLocalToUTC
ALTER FUNCTION [dbo].[ConvertLocalToUTC](@time [datetime],@timeZoneAdj Int, @IsDayLightSavings Bit)
RETURNS [datetime] --WITH EXECUTE AS CALLER
AS
BEGIN
--EXTERNAL NAME [Mmt.Cyramed.Cryptography].[Mmt.Cyramed.Cryptography.Cryptography].[ConvertLocalToUTC]
RETURN dbo.[GetPracticeUTCDateTime](@time,@timeZoneAdj,@IsDayLightSavings)
END
--------------Below function is called inside above-----------
ALTER FUNCTION [dbo].[GetPracticeUTCDateTime]
(
@InLocaleDateTime DATETIME,
@TimeZoneAdj INT,
@IsDayLightSaving BIT
)
RETURNS DateTime
AS
BEGIN
DECLARE @OutLocalDateTime DATETIME
set @outLocalDateTime = dateadd(MINUTE , -1 * @TimeZoneAdj, @inLocaleDateTime)
if (@IsDayLightSaving = 1) -- figure in daylight savings time
BEGIN
declare @yearToCheck int
set @yearToCheck = datepart(yyyy, @outLocalDateTime)
declare @DSstart datetime, @DSend datetime
-- If 2k7 or greater...
if ( @yearToCheck >= 2007 )
BEGIN
-- determine if we're in daylight savings time (second Sunday in march through first Sunday in november)
set @DSstart = convert(varchar(4), @yearToCheck) + '-03-08 02:00:00.000'
set @DSend = convert(varchar(4), @yearToCheck) + '-11-1 02:00:00.000'
-- figure out the first sunday in April
while (datepart(dw, @DSstart) <> 1) -- dw is 1 for Sunday
set @DSstart = dateadd(dd, 1, @DSstart)
-- figure out the last sunday in October
while (datepart(dw, @DSend) <> 1) -- dw is 1 for Sunday
set @DSend = dateadd(dd, 1, @DSend)
END
ELSE -- if less than 2k7
BEGIN
-- determine if we're in daylight savings time (1st Sunday in April through last Sunday in October)
set @DSstart = convert(varchar(4), @yearToCheck) + '-04-01 02:00:00.000'
set @DSend = convert(varchar(4), @yearToCheck) + '-10-31 02:00:00.000'
-- figure out the first sunday in April
while (datepart(dw, @DSstart) <> 1) -- dw is 1 for Sunday
set @DSstart = dateadd(dd, 1, @DSstart)
-- figure out the last sunday in October
while (datepart(dw, @DSend) <> 1) -- dw is 1 for Sunday
set @DSend = dateadd(dd, -1, @DSend)
END
-- If in daylight savings, adjust
if ((@outLocalDateTime >= @DSstart) and (@outLocalDateTime < @DSend))
set @outLocalDateTime = dateadd(hh, -1, @outLocalDateTime)
END -- if observe daylight savings
RETURN @outLocalDateTime
END
Comments
Post a Comment