7

次のような署名を持つ関数を実装しようとしています。

bool IsTimeZoneValid(string countryCode, DateTime localTime);

その意図は、現在の UTC 時間がわかっている場合に、その国に現地時間が有効なタイム ゾーンがあるかどうかを判断することです。議論のために、「有効な」とは、UTC に変換されたときの時刻が、私たちが信じている時刻から +/- 30 分であることを意味するとしましょう。

たとえば、現在が 2009 年 3 月 8 日 18:25:00 UTC であるとすると、オーストラリアに対して次のメソッド呼び出しが与えられた場合true、これは「東部標準時」ゾーンで有効な時間であるため、返されるはずです。

IsTimeZoneValid("AU", DateTime.Parse("04/08/2009 03:25:00"));

ただし、これはフランスのタイム ゾーンでは有効な時間ではないため、フランスの次の呼び出しは失敗するはずです。

IsTimeZoneValid("FR", DateTime.Parse("04/08/2009 03:25:00"));

これは正確である必要があり、夏時間などを考慮する必要があります。

.NET 3.5 にはTimeZoneInfo、特定の国に存在するタイム ゾーンがわかっている場合に多くの変換を実行できる新しいクラスが含まれていますが、これに対する組み込みのルックアップが見つからないようです。それとも、国とタイムゾーンの対応表を手動で作成する必要がありますか?

繰り返しますが、私の質問は次のとおりです。国コードが与えられた場合、タイム ゾーンのリストを取得するにはどうすればよいですか。あるいは、私が見逃したこれにアプローチする別の方法はありますか?

4

1 に答える 1

5

デフォルトでは、Windows はローカル タイム ゾーンのタイム ゾーン情報のみを追加します。これが問題の原因である可能性があります。

このクラスは、ローカル タイム ゾーンと定義済みのタイム ゾーンに対してのみ機能します。これを他のタイム ゾーンに使用する場合は、必要なすべてのタイム ゾーンのレジストリ設定をマシンに追加するか、CreateCustomTimeZone を使用してカスタム タイム ゾーン情報を作成する必要があります。

http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx?ppud=4 http://msdn.microsoft.com/en-us/library/bb384268.aspx

于 2009-08-03T18:00:07.730 に答える