2017-06-21 107 views
0

我使用下面的API正确的时间在我的代码GetCurrentTime()返回亘古

COleDateTime timeStamp = COleDateTime::GetCurrentTime(); 

而且它给不正确的值

当系统时间为12时36分08秒这是返回03:36 :08。

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

有没有人遇到类似的行为?

回答

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); 
} 
+0

我的时区是UTC -5。并且我没有看到由GetCurrentTime()返回的系统时间和时间之间的5小时差异。 – Geek

+1

@Geek请在我的第二个示例中使用'GetSystemTime'和'GetLocalTime'来检查您的本地时间和系统时间 – Rama

相关问题