我在我的代码中使用下面的api
COleDateTime timeStamp = COleDateTime::GetCurrentTime();
它提供的值不正确
当系统时间是12:36:08时,这是03:36:08返回。
我检查了系统时间设置,并使用了美国区域设置。
有没有人经历过类似的行为?
答案 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(<);
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 代替