有些地方我們可能需要使用者輸入時間資訊.MFC裡面有個控制項Date Time Picker可以方便的實現該功能.發現MFC控制項資訊有些混亂,在ToolBox中叫Date Time Picker,在Properties頁面看到的就是Date-Time Control了,然後對應的類名又變成CDateTimeCtrl了. 當然還好沒有不同控制項名字比較類似,所以還不至於造成混淆.
說到時間我們想到的是年月日(一般叫作日期date),小時分鐘秒鐘(一般叫作時間time) .當然還有毫秒,世紀這些就不太常用了.
可以給Date-Time control做些不同的設定來選擇日期或者時間(不過不能同時在一個控制項中設定日期和時間,所以如果需要設定兩者的資訊必須用兩個控制項)
選擇年月日
//從toolbox中拖Date Time Picker到頁面,properties中的屬性都不變,Format是預設的Short Date, Use Spin Control為 False
//綁定一個變數
CDateTimeCtrl m_dateCtrl;
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_dateCtrl);
//預設的顯示格式是: 月/日/年.如果你覺得看不順眼,想變成年/月/日可以這樣設定
//反正yyyy代表年,MM代表月,dd代表日,順序你可以順便調.另外大小寫不能換是固定的.這裡月這所以整成MM是為了和表示分鐘的mm區分.
m_dateCtrl.SetFormat(_T("yyyy/MM/dd"));
//開啟頁面後發現控制項裡面選日期真的很方便.現在接下來就是要怎麼在代碼裡面擷取那些時間資訊.
//我們可以用類CTime (一個ATL中的類,ATL也跟MFC一樣是個類庫.不過反正都整合到VS中,我們用的時候不用去區分是誰的類了)
CTime m_date; //別看名字以後它只有時間的資訊,實際上它可以同時儲存日期和時間資訊
m_dateCtrl.GetTime(m_date); //把控制項裡的時間資訊弄過來了啊.接下來用著就方便了
int year = m_date.GetYear();
int month = m_date.GetMonth();
int day = m_date.GetDay();
選擇時間
//同樣是用控制項Date Time Picker,只不過屬性要改下.把Properites中的屬性Format改成Time, User Spin Control為True.
//當然你也可以不改Format,在代碼中用SetFormat去設定也一樣.
CDateTimeCtrl m_timeCtrl;
DDX_Control(pDX, IDC_DATETIMEPICKER2, m_timeCtrl);
//時間預設顯示是跟你作業系統上的時間設定格式一樣.有時可能只顯示小時和分鐘,沒有秒.你可以在代碼中設定顯示秒
m_timeCtrl.SetFormat(_T("hh:mm:sstt"));
擷取時間資訊
CTime m_time;
m_timeCtrl.GetTime(m_time);
int hour = m_time.GetHour();
int minute= m_time.GetMinute();
int second = m_time.GetSecond();
日期時間的運算
如果你想把日期和時間合并起來放到新的CTime中也很簡單
CTime m_dateTime(year , month ....) ;//傳6個參數進去就行了.
CTime是比較老的類庫中的類,能表示的範圍較少,而類似的類COleDateTime ,跟CTime類似,你也可以傳6個參數構造它就行.
另外還有個有用的函數是擷取目前時間的.
CTime time1 = CTime::GetCurrentTime();
另外我們可以對日期和時間做加減操作
例如
CTimeSpan timeSpan = m_date1 - m_date2;
如果是COleDateTime則加減結果對應的是COleDateTimeSpan類型