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的格式啦。