/*使用unsigned const char*纯碎是为了配合项目,改成char*会比较通用些*/
BOOL CDllSuiteEngine::Time_StrToType(unsigned const char* lpszValue, SYSTEMTIME &time)
{
if (!lpszValue)
{
return FALSE;
}
int nYear = 0;
int nMonth = 0;
int nDay = 0;
int nHour = 0;
int nSecond = 0;
int nMinute = 0;
int nMilliSecond = 0;
CString str = lpszValue;
sscanf(str, _T("%d-%d-%dT%d:%d:%d.%dZ"), &nYear, &nMonth, &nDay, &nHour, &nMinute, &nSecond,&nMilliSecond);
// if (nMonth==0 || nDay==0)
// {
// _stscanf(str, _T("%d/%d/%d %d:%d:%d"), &nYear, &nMonth, &nDay, &nHour, &nMinute, &nSecond);
// }
time.wYear = nYear;
time.wMonth = nMonth;
time.wDay = nDay;
time.wHour = nHour;
time.wSecond = nSecond;
time.wMinute = nMinute;
time.wMilliseconds = nMilliSecond;//MUST be set, or all member of converted local time is 52428
return TRUE;
}
void CDllSuiteEngine::Time_UTCToLocal(SYSTEMTIME& tUTC, SYSTEMTIME& tLocal)
{
//e.g. "2013-06-23T19:10:57.000Z";
TIME_ZONE_INFORMATION timeZomeInfo;
::GetTimeZoneInformation(&timeZomeInfo);
::SystemTimeToTzSpecificLocalTime(&timeZomeInfo, &tUTC, &tLocal); //Careful: member MilliSeconds must be set.
}
void CDllSuiteEngine::Time_TypeToStr(SYSTEMTIME tType,CString& szTime)
{
szTime.Empty();
szTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), tType.wYear, tType.wMonth, tType.wDay, tType.wHour, tType.wMinute, tType.wSecond);
}
void CDllSuiteEngine::Time_UTCStrToLocalStr(unsigned const char* szUTC,CString& cLocal)
{
cLocal.Empty();
if(!szUTC)
return;
SYSTEMTIME tUTC;
SYSTEMTIME tLocal;
if(Time_StrToType(szUTC, tUTC))
{
Time_UTCToLocal(tUTC, tLocal);
Time_TypeToStr(tLocal, cLocal);
}
}
void main()
{
CString cLocalTime;
Time_UTCStrToLocalStr("2013-06-23T19:10:57.000Z",cLocalTime);
//output..
}