1. ホーム
  2. c++

[解決済み] GetCurrentTime()が正しい時刻を返さない

2022-02-16 07:30:35

質問

私のコードでは、以下のAPIを使用しています。

COleDateTime  timeStamp = COleDateTime::GetCurrentTime();

そして、それは不正確な値を与えています

システム時刻が12:36:08のとき、03:36:08と返されました。

システム時刻設定を確認したところ、米国の地域設定が使用されていました。

同様の挙動を経験された方はいらっしゃいますか?

解決方法は?

COleDateTime::GetCurrentTime(); はUTCで表示されているので、あなたのローカルタイムに変換する必要があります。 これ :

COleDateTime dt;  // yor UTC time
..........
TIME_ZONE_INFORMATION timeZoneInformation;
DWORD dwTZ = GetTimeZoneInformation(&timeZoneInformation);
if(dwTZ == TIME_ZONE_ID_STANDARD || dwTZ == TIME_ZONE_ID_DAYLIGHT)
{
    SYSTEMTIME timeUTC 
    dt.GetAsSystemTime(&timeUTC);
    SYSTEMTIME timeLocal;
    SystemTimeToTzSpecificLocalTime(&timeZoneInformation, &timeUTC, &timeLocal);
    dt = COleDateTime(&timeLocal);
}
else
{
    //error handling
}

また、以下を使用して確認することができます。 プログラム :

#include <windows.h>
#include <stdio.h>

void main()
{
    SYSTEMTIME st, lt;

    GetSystemTime(&st);
    GetLocalTime(&lt);

    printf("The system time is: %02d:%02d\n", st.wHour, st.wMinute);
    printf(" The local time is: %02d:%02d\n", lt.wHour, lt.wMinute);
}