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

Popular posts from this blog

Querying a Data Table Using Select Method and Lambda Expressions in Dot Net

StringToTable

GetPhoneSSNFormat