Based on Colinp_1 post I created a solution to convert a datetime to datetimeoffset that takes DST and TZ into account.
Hope this helps!
DECLARE @offset int -- offset in min
DECLARE @dst bit
DECLARE @appDate datetime
set @dst = 1
set @offset = +60
set @appDate = '2017-04-06 14:21:10.000'
-- output the start and end datetime of DST to the given @appDate
select dateadd(hour, 2,
dateadd(day, 1 - datepart(weekday
, dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @appDate), 0))))
, dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @appDate), 0))))) AS 'MEZ -> MESZ'
, dateadd(hour, 2,
dateadd(day, 1 - datepart(weekday
, dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @appDate), 0))))
, dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @appDate), 0))))) AS 'MESZ -> MEZ'
-- output the @appDate as datetimeoffset including offset and DST
SELECT @dst AS 'DST on'
, @offset AS 'TZ offset'
, @appDate AS 'originalDate'
, qDT.isAppDateInDST
, qDT.datetimeoffset
, CONVERT(datetime, qDT.datetimeoffset, 1) AS 'UTC'
FROM (
SELECT
CASE WHEN @dst = 1 THEN -- check if DST is needed
CASE
WHEN qDST.isAppDateInDST = 1
THEN TODATETIMEOFFSET(@appDate, @offset + 60) -- add 1 hour to @appDate when its in DST and convert to DATETIMEOFFSET
ELSE TODATETIMEOFFSET(@appDate, @offset) -- convert to DATETIMEOFFSET with given offset
END
ELSE
TODATETIMEOFFSET(@appDate, @offset) -- convert to DATETIMEOFFSET with given offset
END AS 'datetimeoffset'
, qDST.isAppDateInDST
FROM (
SELECT
CASE WHEN @appDate >= dateadd(hour, 2,
dateadd(day, 1 - datepart(weekday
, dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @appDate), 0))))
, dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @appDate), 0)))))
and @appDate < dateadd(hour, 2,
dateadd(day, 1 - datepart(weekday
, dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @appDate), 0))))
, dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @appDate), 0)))))
THEN 1
ELSE 0
END AS 'isAppDateInDST'
) qDST
) qDT
GO