CString strTime;
strTime.Format("%s",row[1]);
COleDateTime oleTime;
oleTime.ParseDateTime(strTime);
SYSTEMTIME sysTime;
oleTime.GetAsSystemTime(sysTime);
sysTime.wYear = sysTime.wYear;// 是不是很奇葩,却必须这样
CTime cTime(sysTime);
是这样的
CTime的时间范围和COleDateTime不同
你调试一下就会知道由于你没有制定年月日
所以st的年份默认是1899年
但是CTime最早只能到1970
所以它就用他能表示的最早的时间1970/1/1 0:0:0来初始化
这个时间是国际标注时
我们中国是东八区
所以CTime内部会做一个local的转换
结果就是1970/1/1 8:0:0
这就是你为什么会得到08:00:00的原因
修改一下st的年份即可
比如
|
1
2
3
4
5
6
7
8
|
COleDateTime dt;SYSTEMTIME st;dt.ParseDateTime(_T("19:23:22"));dt.GetAsSystemTime(st);st.wYear = 2000;CTime tmBegTime(st);CString str = tmBegTime.Format(_T("%H:%M:%S")); |
本文解析了CTime与COleDateTime在时间处理上的差异,特别是在未指定完整日期时出现的问题,并提供了具体的解决方案,确保两者之间的正确转换。

1231

被折叠的 条评论
为什么被折叠?



