2つのテーブルを作成し、それらに結合して、保存されているGMT日付を現地時間に変換します。
TimeZones e.g.
--------- ----
TimeZoneId 19
Name Eastern (GMT -5)
Offset -5
夏時間の表を作成し、できるだけ多くの情報を入力します(地域の法律は常に変更されるため、将来のデータがどのようになるかを予測する方法はありません)
DaylightSavings
---------------
TimeZoneId 19
BeginDst 3/9/2008 2:00 AM
EndDst 11/2/2008 2:00 AM
このように参加してください:
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
次のように日付を変換します:
dateadd(hh, tz.Offset +
case when ds.LocalTimeZone is not null
then 1 else 0 end, TheDateToConvert)