MFC-DateTimePicker

效果如图:

计算日期间隔:

在DateTimePicker控件事件消息中,选择DTN_DATETIMECHANGE如图:

void CMFCTESTDlg::OnDtnDatetimechangeDateBg(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;

    CString strText;
    CTime DateBg;
    CTime DateEnd;

    //获取开始日期和结束日期
    this->m_DateBg.GetTime(DateBg);
    this->m_DateEnd.GetTime(DateEnd);

    //计算时间间隔
    int iYears = abs(DateEnd.GetYear() - DateBg.GetYear());
    int iMonths = abs(DateEnd.GetMonth() - DateBg.GetMonth());
    int iDays = abs(DateEnd.GetDay() - DateBg.GetDay());
    strText.Format(_T("相距 %d年 %d月 %d日"), iYears, iMonths, iDays);
    SetDlgItemText(IDC_STATIC_DATE, strText);   

}

截止日期的函数和起始日期函数一样

void CMFCTESTDlg::OnDtnDatetimechangeDateEnd(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;

    CString strText;
    CTime DateBg;
    CTime DateEnd;

    //获取开始日期和结束日期
    this->m_DateBg.GetTime(DateBg);
    this->m_DateEnd.GetTime(DateEnd);

    int iYears = abs(DateEnd.GetYear() - DateBg.GetYear());
    int iMonths = abs(DateEnd.GetMonth() - DateBg.GetMonth());
    int iDays = abs(DateEnd.GetDay() - DateBg.GetDay());
    strText.Format(_T("相距 %d年 %d月 %d日"),iYears,iMonths,iDays);
    SetDlgItemText(IDC_STATIC_DATE, strText);
}

一样也要写,因为如果第二个控件不写,改变它的日期就不会更新到变量中.

计算时间间隔:

void CMFCTESTDlg::OnDtnDatetimechangeTimeBg(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;

    CString strText;
    CTime TimeBg;
    CTime TimeEnd;

    //获取开始日期和结束日期
    this->m_TimeBg.GetTime(TimeBg);
    this->m_TimeEnd.GetTime(TimeEnd);

    //计算时间间隔 //这种计算相差多少个小时多少分钟多少秒,不会自动进位
// int iHours = abs(TimeEnd.GetHour() - TimeBg.GetHour());
// int iMinutes = abs(TimeEnd.GetMinute() - TimeBg.GetMinute());
// int iSeconds = abs(TimeEnd.GetSecond() - TimeBg.GetSecond());
// strText.Format(_T("相距 %d时 %d分 %d秒"),iHours,iMinutes,iSeconds );

    //另一种方法是使用CTimeSpan ,会自动进位
    CTimeSpan ts = TimeEnd - TimeBg;
    strText.Format(_T("相距 %d时 %d分 %d秒"), ts.GetHours(), ts.GetMinutes(), ts.GetSeconds());
    SetDlgItemText(IDC_STATIC_TIME, strText);
}


void CMFCTESTDlg::OnDtnDatetimechangeTimeEnd(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMDATETIMECHANGE pDTChange = reinterpret_cast<LPNMDATETIMECHANGE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    CString strText;
    CTime TimeBg;
    CTime TimeEnd;

    //获取开始日期和结束日期
    this->m_TimeBg.GetTime(TimeBg);
    this->m_TimeEnd.GetTime(TimeEnd);

    //计算时间间隔 //这种计算相差多少个小时多少分钟多少秒,不会自动进位
    // int iHours = abs(TimeEnd.GetHour() - TimeBg.GetHour());
    // int iMinutes = abs(TimeEnd.GetMinute() - TimeBg.GetMinute());
    // int iSeconds = abs(TimeEnd.GetSecond() - TimeBg.GetSecond());
    // strText.Format(_T("相距 %d时 %d分 %d秒"),iHours,iMinutes,iSeconds );

    //另一种方法是使用CTimeSpan,会自动进位
    CTimeSpan ts = TimeEnd - TimeBg;
    strText.Format(_T("相距 %d时 %d分 %d秒"), ts.GetHours(), ts.GetMinutes(), ts.GetSeconds());
    SetDlgItemText(IDC_STATIC_TIME, strText);
}

你可能感兴趣的:(Date,mfc,time,Picker,时间日期控件)