CTime,Systemtime的比较还有转换成日期格式。
vc為我們提供了兩種日期型的變量。
一種是CTime。他的缺點(diǎn)就是年份只支持到2038年,以后的日期就不支持啦,如果你的項(xiàng)目有20-30年的壽命,你就選擇使用SYSTEMTIME.這個(gè)時(shí)間函數(shù)來進(jìn)行比較還有轉(zhuǎn)換。
一種是SYSTEMTIME。
在比較的時(shí)候都不能直接比較。看一下第一種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;
}
代碼就不解釋啦。
轉(zhuǎn)換成日期格式
CString dateFrom=timeFrom.Format(_T("%Y-%m-%d"));
CString dateTo=timeTo.Format(_T("%Y-%m-%d"));
這樣你就可以查詢兩個(gè)日期之間的數(shù)據(jù)啦。
再看一下,SYSTEMTIME的比較,還是轉(zhuǎn)換成日期格式。
一樣也是定義兩個(gè)變量。
SYSTEMTIME timeFrom,timeTo;
m_dateFrom.GetTime(&timeFrom);
m_dateTo.GetTime(&timeTo);
但是這兩個(gè)時(shí)間怎么比較呢,查了好多資料,都是要轉(zhuǎn)換成CTime進(jìn)行比較。
這樣字就沒有意義啦。
再在來介紹一種內(nèi)存比較方法。
兩個(gè)日期進(jìn)行內(nèi)存比較就可以判斷出大小來。也不用費(fèi)事去轉(zhuǎn)換。
int re=memcmp(&timeFrom,&timeTo,sizeof(SYSTEMTIME));
if (re>0)
{
AfxMessageBox(_T("Date illegal"));
return;
}
如果是re>0就說明第一個(gè)選擇的日期比第二個(gè)大。
如果是re<0就說明第一個(gè)選擇的日期比第二個(gè)小。
如果是re=0就說明第一個(gè)選擇的日期等于第二個(gè)。
下來看一下怎么把SYSTEMTIME轉(zhuǎn)換成日期格式xxxx-xx-xx
先來看一下他的幾種寫法分別出來的效果是什么樣子的。
VariantTimeToSystemTime(NULL,&timeFrom);
如果是這樣寫的話,不管你的日期選擇的是哪一天,永遠(yuǎn)都是一天,是哪一天呢。1899-12-30日。
加個(gè)這個(gè)看看行不行
?COleDateTime oleTime;
VariantTimeToSystemTime(oleTime,&timeFrom);
結(jié)果運(yùn)行結(jié)果還是一樣,還是那一天。
就沒有解決辦法了嗎?
看一下這樣定義行不行。
DATE date;
VariantTimeToSystemTime(date,&timeFrom);
CString dateFrom;
dateFrom.Format(_T("%04u-%02u-%02u"),timeFrom.wYear,timeFrom.wMonth,timeFrom.wDay);
這樣就可以完全顯示成XXXX-xx-xx的格式啦。
?
轉(zhuǎn)載于:https://www.cnblogs.com/snake-hand/p/3174601.html
總結(jié)
以上是生活随笔為你收集整理的CTime,Systemtime的比较还有转换成日期格式。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2013年7月04日_回顾总结
- 下一篇: 如何设置SecureCRT通过代理连接S