Cree dos tablas y luego únase a ellas para convertir las fechas GMT almacenadas a la hora local:
TimeZones e.g.
--------- ----
TimeZoneId 19
Name Eastern (GMT -5)
Offset -5
Cree la tabla de horario de verano y complétela con toda la información que pueda (las leyes locales cambian todo el tiempo, por lo que no hay forma de predecir cómo se verán los datos en los próximos años)
DaylightSavings
---------------
TimeZoneId 19
BeginDst 3/9/2008 2:00 AM
EndDst 11/2/2008 2:00 AM
Únete a ellos así:
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
Convierte fechas como esta:
dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, TheDateToConvert)