4

私はしようとしています:

  1. ユーザーが Windows コントロール パネルからタイム ゾーンを選択したときに表示されるタイム ゾーン名のリストを取得します (例: 「(UTC-08:00) 太平洋時間 (米国およびカナダ)」)。

私は、うまく機能するレジストリの「CurrentVersion\Time Zones」セクションを読んで、それを行っています。

  1. 現在選択されているタイム ゾーンを文字列として取得します。

GetTimeZoneInformation() を使用して現在のタイム ゾーンを取得できますが、レジストリの「CurrentVersion\Time Zones」セクションから取得したタイム ゾーンのリストと名前が一致しません。たとえば、タイム ゾーンのリストでは、太平洋時間は「(UTC-08:00) Pacific Time (US & Canada)」と表示されますが、GetTimeZoneInformation() には文字列「Pacific Standard Time」と「Pacific Daylight Time」が含まれています。リストから選択できるように、「CurrentVersion\Time Zones」の名前に対応する名前を見つける必要があります。

  1. 文字列名に基づいて、UTC とその他のタイム ゾーンとの間の現在のオフセット (分単位) を取得します。

timeZoneInformation.Bias で UTC からのオフセットを取得できますが、それは現在選択されているタイム ゾーンのみです。レジストリにリストされている任意のゾーンからの「バイアス」を知る必要があります (たとえば、「(UC-07:00) 山岳部時間 (米国およびカナダ)」、有効な場合は夏時間調整)。

4

2 に答える 2

1
TimeZoneInfo.Bias

TIME_ZONE_INFORMATION 構造 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx

SetTimeZoneInformation 関数 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms724944(v=vs.85).aspx

  // Get the local system time.
SYSTEMTIME LocalTime = { 0 };
GetSystemTime( &LocalTime );

// Get the timezone info.
TIME_ZONE_INFORMATION TimeZoneInfo;
GetTimeZoneInformation( &TimeZoneInfo );

// Convert local time to UTC.
SYSTEMTIME GmtTime = { 0 };
TzSpecificLocalTimeToSystemTime( &TimeZoneInfo,
                                 &LocalTime,
                                 &GmtTime );

// GMT = LocalTime + TimeZoneInfo.Bias
// TimeZoneInfo.Bias is the difference between local time
// and GMT in minutes.

// Local time expressed in terms of GMT bias.
float TimeZoneDifference = -( float(TimeZoneInfo.Bias) / 60 );
CString csLocalTimeInGmt;
csLocalTimeInGmt.Format( _T("%ld:%ld:%ld + %2.1f Hrs"),
                         GmtTime.wHour,
                         GmtTime.wMinute,
                         GmtTime.wSecond,
                         TimeZoneDifference );

TimeZoneInfo クラス - http://msdn.microsoft.com/en-us/library/bb396389 夏時間の決定 - http://www.metatrader4.com/forum/2155

于 2012-08-24T16:22:56.997 に答える