GetDynamicTimeZoneInformation
は必ずしも機能しません。サポートされている最小バージョンは、Windows Vista、Windows Server 2008、およびWindows Phone 8です。それ以下のものはGetTimeZoneInformation
が良いです。
ただし、別の問題が両方とも時々StandardName
またはDaylightName
を返します。その場合は、Windowsレジストリを使用する必要があります。 glibから変更されたgnu現金から取った関数を次に示します。
static std::string
windows_default_tzname(void)
{
const char *subkey =
"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation";
constexpr size_t keysize{128};
HKEY key;
char key_name[keysize]{};
unsigned long tz_keysize = keysize;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, subkey, 0,
KEY_QUERY_VALUE, &key) == ERROR_SUCCESS)
{
if (RegQueryValueExA(key, "TimeZoneKeyName", nullptr, nullptr,
(LPBYTE)key_name, &tz_keysize) != ERROR_SUCCESS)
{
memset(key_name, 0, tz_keysize);
}
RegCloseKey(key);
}
return std::string(key_name);
}
何を試しましたか?あなたの試行で何か問題が発生しましたか? –
あなたは 'linux standard'と言うとUTCを意味するのですか? LinuxマシンをUTCクロックで動作させていますか? [GetSystemTimeAsFileTime](http://msdn.microsoft.com/en-us/library/ms724397.aspx)はUTCを返しますか? 3つ目のNTPサーバーに両方を同期させたり、1つのボックスでNTPサーバーを実行して使用する方が良いでしょうか?どちらのOSもNTPクライアントを利用可能/内蔵しています。 – Rup
多くの場合、NTPが最適です。しかし、この場合、リアルタイムではなく、お互いを同期させる必要があります。 – mustafa