この優れた記事「世界時計と TimeZoneInformation クラス」でソリューションを補完できます。ローカル時刻と受信時刻を含む情報を含むファイルを送信する Web サービスを作成しました。この問題を処理できるように、このクラスを変更しました。まさに私が必要としていたように、それは完璧に機能しました。
このクラスを利用して、テーブル「ユーザー」からタイムゾーンを取得し、適切な時間を「計算」できると思います。私のコードは次のようになりました。
//Get correct destination time
DateTime thedate = DateTime.Now;
string destinationtimezone = null;
//Load the time zone where the file is going
TimeZoneInformation tzi = TimeZoneInformation.FromName(this.m_destinationtimezone);
//Calculate
destinationtimezone = tzi.FromUniversalTime(thedate.ToUniversalTime()).ToString();
このクラスには、Windows Vista で「FromIndex(int index)」関数をクラッシュさせる問題がありますが、関数を使用する代わりにコードを変更できます。
public static TimeZoneInformation FromIndex(int index)
{
TimeZoneInformation[] zones = EnumZones();
for (int i = 0; i < zones.Length; ++i)
{
if (zones[i].Index == index)
return zones[i];
}
throw new ArgumentOutOfRangeException("index", index, "Unknown time zone index");
}
次のように変更できます。
public static TimeZoneInformation FromName(string name)
{
TimeZoneInformation[] zones = EnumZones();
foreach (TimeZoneInformation tzi in zones)
{
if (tzi.DisplayName.Equals(name))
return tzi;
}
throw new ArgumentOutOfRangeException("name", name, "Unknown time zone name");
}