2011-01-28 10 views
0

私はTzID(Olson tzid形式Exp: "Europe/Copenhagen")を与えられました。その後、私はそのタイムゾーン(サーバーのローカルタイムゾーンとは異なる)からDateTimeのタイムゾーン変換をUTCにしようとしました.C#TimeZonInfoクラスを使用しています。FindSystemTimeZoneByIdを使用してメタゾーンのTimeZoneを取得する方法は?

ウィンドウのタイムゾーンIDはたったの約100オルソン TZデータベースのタイムゾーンID一方を持っている理由私が思っていた約405 TZ IDを持っています。時間帯「ヨーロッパ/コペンハーゲン」では、FindSystemTimeZonebyIDを使用して、このタイムゾーンのタイムゾーン情報(Olson ID to windows ID convertion tableのメタゾンに記載されています)を取得する方法がわかりません。誰でもこれで経験?私を助けてください。

答えて

1

From MSDN

FindSystemTimeZoneByIdは、Windows XPとWindows VistaでレジストリのHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones枝のサブキー名にIDを一致させようとします。このブランチには、タイムゾーン識別子の包括的なリストが含まれているとは限りません。

Olson "Europe/Copenhagen"のWindows版であるため、Europe_Centralという文字列を渡したいとします。 (MSDNドキュメントによれば、大文字と小文字は区別されないことに注意してください)。それでも問題が解決しない場合は、レジストリを確認してEurope_Centralエントリが存在することを確認する必要があります。

Olson tzデータベースの詳細とタイムゾーンの定義方法については、wikipediaを参照してください。


アップデート1:

私はパラメータとして渡す必要があるだろう文字列である私のレジストリ(ビスタ)はCentral Europe Standard Timeとしてリストされている、あなたが同様のエントリがありますか?

そのエントリがレジストリにない場合は、hereの情報を使用してcreate it yourselfとすることができますが、夏時間のルールを作成する必要があるようです(リンクを参照)。

DateTimeとローカルサーバ時間を持ち、TimeSpanの+1時間(CET)を渡して、DateTimeOffsetを試してみることもできます。

何をしようとしているかによって、CET時間から1時間を引いてUTCを取得することもできます。 (ただし、Central Europe Summer Timeが有効になると動作しませんが、2時間を引く必要があります)

+0

お返事ありがとうございます。私は、 'HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones'のパスでレジストリをチェックし、タイムゾーンレジストリのアップデート後に 'Europe_Central'のタイムゾーンレジストリが存在しないことがわかりました。 support.microsoft.com/kb/979306)。私はタイムゾーンレジストリにそこにないものを追加する方法を知っていてもいいですか?手動でレジストリに追加すると、レジストリが多すぎるようです。ありがとう。 – darrell

+0

@darrell:C#で簡単な時間オブジェクトを作成するためのいくつかのオプションを追加しました。私はレジストリがどのように構造化されているのか分かりませんし、それを編集することを躊躇します。たぶん誰かが知っているだろう... Good Luck! – yhw42

+0

ありがとう、私はTimeZoneInfo.CreateCustomTimeZoneメソッドを使用してタイムゾーンクラスを作成すると、レジストリを編集してタイムゾーンを設定するよりもはるかに安全で安全だと思います。 – darrell

関連する問題