CTime,Systemtime的比較還有轉換成日期格式。

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








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章