Créez deux tables, puis joignez-les pour convertir les dates GMT stockées en heure locale :
TimeZones e.g.
--------- ----
TimeZoneId 19
Name Eastern (GMT -5)
Offset -5
Créez le tableau de l'heure d'été et remplissez-le avec autant d'informations que possible (les lois locales changent tout le temps, il n'y a donc aucun moyen de prédire à quoi ressembleront les données dans les années à venir)
DaylightSavings
---------------
TimeZoneId 19
BeginDst 3/9/2008 2:00 AM
EndDst 11/2/2008 2:00 AM
Rejoignez-les comme ceci :
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
Convertissez les dates comme ceci :
dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, TheDateToConvert)