GetCurrentTime()不返回正确的时间

时间:2017-06-21 20:26:50

标签: c++ mfc

我在我的代码中使用下面的api

COleDateTime  timeStamp = COleDateTime::GetCurrentTime();

它提供的值不正确

当系统时间是12:36:08时,这是03:36:08返回。

我检查了系统时间设置,并使用了美国区域设置。

有没有人经历过类似的行为?

2 个答案:

答案 0 :(得分:2)

COleDateTime::GetCurrentTime();是UTC格式,因此您需要将其转换为当地时间,请参阅this

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
}

您也可以使用以下program

进行检查
#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);
}

答案 1 :(得分:0)

简短回答:GetCurrentTime 不返回当前时间,它与 GetTickCount 相同,以毫秒为单位返回自窗口启动以来的时间(基本上:正常运行时间)。

来自 Windows 的帮助文件:

GetCurrentTime 已过时。提供此功能只是为了与 16 位版本的 Windows 兼容。基于 Win32 的应用程序应使用 GetTickCount 函数或在注册表项 HKEY_PERFORMANCE_DATA 的性能数据中查找 System Up Time 计数器。

DWORD GetTickCount(VOID)

GetTickCount 函数检索自 Windows 启动以来经过的毫秒数。

经过的时间存储为 DWORD 值。因此,如果 Windows 连续运行 49.7 天,时间将回绕到零

WINNT 0x0600 及更高版本应使用 GetTickCount64 代替