如何将CString格式YYYYMMDD日期解析为COleDateTime并转为短日期?
解决COleDateTime解析无分隔符日期并格式化短日期的问题
你的代码问题出在ParseDateTime无法默认识别无分隔符的8位数字日期(如"20240415"),导致日期解析未按预期完成,后续Format自然无法输出正确的短日期格式。以下是两种可行的解决方法:
方法一:手动拆分日期字段直接设置
直接从字符串中提取年、月、日,调用SetDateTime构造合法的COleDateTime对象,再用指定格式输出:
CString strInstallDate = _T("20240415"); COleDateTime lastInstalledDate; if (strInstallDate.GetLength() == 8) { int year = _ttoi(strInstallDate.Left(4)); int month = _ttoi(strInstallDate.Mid(4, 2)); int day = _ttoi(strInstallDate.Right(2)); // 验证日期有效性并设置 if (lastInstalledDate.SetDateTime(year, month, day, 0, 0, 0)) { // 使用系统默认短日期格式(如15/04/2024) strInstallDate = lastInstalledDate.Format(_T("%x")); // 若需固定格式,可替换为:strInstallDate = lastInstalledDate.Format(_T("%d/%m/%Y")); } }
方法二:转换为带分隔符的日期再解析
先将无分隔符字符串转换为ParseDateTime可识别的带分隔符格式(如"2024-04-15"),再进行解析和格式化:
CString strInstallDate = _T("20240415"); COleDateTime lastInstalledDate; // 转换为带横杠分隔的日期字符串 CString formattedDate; formattedDate.Format(_T("%s-%s-%s"), strInstallDate.Left(4), strInstallDate.Mid(4,2), strInstallDate.Right(2)); if (lastInstalledDate.ParseDateTime(formattedDate, VAR_DATEVALUEONLY, LANG_USER_DEFAULT)) { // 输出系统短日期格式 strInstallDate = lastInstalledDate.Format(_T("%x")); }
关键说明
%x是格式化符,对应系统当前区域设置的短日期格式,会根据用户系统的日期显示偏好自动输出(如英式的DD/MM/YYYY或美式的MM/DD/YYYY)。- 若需要固定格式的输出,直接使用指定格式字符串(如
%d/%m/%Y表示日/月/年)即可。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

