私はしようとしています:
- ユーザーが Windows コントロール パネルからタイム ゾーンを選択したときに表示されるタイム ゾーン名のリストを取得します (例: 「(UTC-08:00) 太平洋時間 (米国およびカナダ)」)。
私は、うまく機能するレジストリの「CurrentVersion\Time Zones」セクションを読んで、それを行っています。
- 現在選択されているタイム ゾーンを文字列として取得します。
GetTimeZoneInformation() を使用して現在のタイム ゾーンを取得できますが、レジストリの「CurrentVersion\Time Zones」セクションから取得したタイム ゾーンのリストと名前が一致しません。たとえば、タイム ゾーンのリストでは、太平洋時間は「(UTC-08:00) Pacific Time (US & Canada)」と表示されますが、GetTimeZoneInformation() には文字列「Pacific Standard Time」と「Pacific Daylight Time」が含まれています。リストから選択できるように、「CurrentVersion\Time Zones」の名前に対応する名前を見つける必要があります。
- 文字列名に基づいて、UTC とその他のタイム ゾーンとの間の現在のオフセット (分単位) を取得します。
timeZoneInformation.Bias で UTC からのオフセットを取得できますが、それは現在選択されているタイム ゾーンのみです。レジストリにリストされている任意のゾーンからの「バイアス」を知る必要があります (たとえば、「(UC-07:00) 山岳部時間 (米国およびカナダ)」、有効な場合は夏時間調整)。