Crie duas tabelas e, em seguida, junte-se a elas para converter as datas GMT armazenadas para a hora local:
TimeZones e.g.
--------- ----
TimeZoneId 19
Name Eastern (GMT -5)
Offset -5
Crie a tabela de horário de verão e preencha-a com o máximo de informações possível (as leis locais mudam o tempo todo, portanto, não há como prever como serão os dados nos próximos anos)
DaylightSavings
---------------
TimeZoneId 19
BeginDst 3/9/2008 2:00 AM
EndDst 11/2/2008 2:00 AM
Junte-se a eles assim:
inner join TimeZones tz on x.TimeZoneId=tz.TimeZoneId
left join DaylightSavings ds on tz.TimeZoneId=ds.LocalTimeZone
and x.TheDateToConvert between ds.BeginDst and ds.EndDst
Converta datas assim:
dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, TheDateToConvert)