也是无意中看到别人的转换代码,这里贴出来,分享出来,已备用。
///< 字符串格式转换为COleDateTime格式:
BOOL ParseDateTimeISO8601(COleDateTime& rDT, LPCTSTR pcszDateTime) { SYSTEMTIME st; ZeroMemory(&st, sizeof(SYSTEMTIME)); int nResult = SCANF_S(pcszDateTime, _T("%hu-%hu-%huT%hu:%hu:%hu"), &st.wYear, &st.wDay, &st.wMonth, &st.wHour, &st.wMinute, &st.wSecond); if (nResult == 3 || nResult == 5 || nResult == 6) { COleDateTime dtTemp(st); if (dtTemp.GetStatus() != COleDateTime::valid) return FALSE; rDT = dtTemp; return TRUE; } ZeroMemory(&st, sizeof(SYSTEMTIME)); nResult = SCANF_S(pcszDateTime, _T("%hu:%hu:%hu"), &st.wHour, &st.wMinute, &st.wSecond); if (nResult == 2 || nResult == 3) { double dblTime = (((long)st.wHour * 3600L) + // hrs in seconds ((long)st.wMinute * 60L) + // mins in seconds ((long)st.wSecond)) / 86400.; rDT = dblTime; return TRUE; } return FALSE; }
///< COleDateTime 转 字符串
CString FormatDateTimeISO8601(const COleDateTime& dt) { ASSERT(dt.m_status == COleDateTime::valid); CString strValue; if ((DWORD)dt == 0) { strValue = dt.Format(_T("%H:%M:%S")); } else if ((double)(DWORD)(dt) == (double)dt) { strValue = dt.Format(_T("%Y-%d-%m")); } else { strValue = dt.Format(_T("%Y-%d-%mT%H:%M:%S")); } return strValue; }