vc为我们提供了两种日期型的变量。
一种是CTime。他的缺点就是年份只支持到2038年,以后的日期就不支持啦,如果你的项目有20-30年的寿命,你就选择使用SYSTEMTIME.这个时间函数来进行比较还有转换。
一种是SYSTEMTIME。
在比较的时候都不能直接比较。看一下第一种CTime .
CTime timeFrom;
m_dateFrom.GetTime(timeFrom);
CTime timeTo;
m_dateTo.GetTime(timeTo);
CTimeSpan timeSpan=timeTo-timeFrom;
if(timeSpan.GetDays()<0)
{
AfxMessageBox(_T("Date illegal"));
return;
}
代码就不解释啦。
转换成日期格式
CString dateFrom=timeFrom.Format(_T("%Y-%m-%d"));
CString dateTo=timeTo.Format(_T("%Y-%m-%d"));
这样你就可以查询两个日期之间的数据啦。
再看一下,SYSTEMTIME的比较,还是转换成日期格式。
一样也是定义两个变量。
SYSTEMTIME timeFrom,timeTo;
m_dateFrom.GetTime(&timeFrom);
m_dateTo.GetTime(&timeTo);
但是这两个时间怎么比较呢,查了好多资料,都是要转换成CTime进行比较。
这样字就没有意义啦。
再在来介绍一种内存比较方法。
两个日期进行内存比较就可以判断出大小来。也不用费事去转换。
int re=memcmp(&timeFrom,&timeTo,sizeof(SYSTEMTIME));
if (re>0)
{
AfxMessageBox(_T("Date illegal"));
return;
}
如果是re>0就说明第一个选择的日期比第二个大。
如果是re<0就说明第一个选择的日期比第二个小。
如果是re=0就说明第一个选择的日期等于第二个。
下来看一下怎么把SYSTEMTIME转换成日期格式xxxx-xx-xx
先来看一下他的几种写法分别出来的效果是什么样子的。
VariantTimeToSystemTime(NULL,&timeFrom);
如果是这样写的话,不管你的日期选择的是哪一天,永远都是一天,是哪一天呢。1899-12-30日。
加个这个看看行不行
COleDateTime oleTime;
VariantTimeToSystemTime(oleTime,&timeFrom);
结果运行结果还是一样,还是那一天。
就没有解决办法了吗?
看一下这样定义行不行。
DATE date;
VariantTimeToSystemTime(date,&timeFrom);
CString dateFrom;
dateFrom.Format(_T("%04u-%02u-%02u"),timeFrom.wYear,timeFrom.wMonth,timeFrom.wDay);
这样就可以完全显示成XXXX-xx-xx的格式啦。