MFC-日期控件DataTime的使用详述

这里我们想做一个日期控件的小demo,空间名为Datatimepicker,定义两个日期窗口,并且在edit窗口中显示两个日期空间所显示时间之间相差的年月日时分秒。以下为本人一步步的x详细操作:

  首先前面板的控件就那么三个,前两个是日期控件,后一个为编辑框,用来显示时间间隔,效果图如下:

这里写图片描述

相应的id号改好,并将编辑文本框控件改成可换行,这可以在属性里设置。

  这里附加上日期格式初始化的方式,WIndows里日期的标准格式为“yyyy-MM-dd HH:mm:ss”年月日时分秒,首先右键时间控件框添加俩变量,我这里命名为m_data_begin、m_data_end.在面板初始化函数里添加相应的代码:

  *(BOOL CDataTimeDemoDlg::OnInitDialog)*
m_data_begin.SetFormat(L"yyyy-MM-dd HH:mm:ss");
    m_data_end.SetFormat(L"yyyy-MM-dd HH:mm:ss");//设置为标准的时间格式

这里写图片描述


 既然我们的目的是计算出时间间隔,因此每次在控件的时间发生改变的时候都要响应某一个消息函数,分别点击两个控件右键类向导,添加相应的处理程序:

这里写图片描述

 出现如下两个消息函数:

这里写图片描述

现在便是要在这个函数中获取当前时间,且将时间间隔输出到文本框控件中,添加如下的代码:
    SYSTEMTIME time_begin={0},time_end={0};
    m_data_begin.GetTime(&time_begin);//获取当前控件的时间
    m_data_end.GetTime(&time_end);//获取另一控件的时间 
    /*WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds;SYSTEMTIME该结构体包含详细的年月日时分秒并不适于计算*/
    FILETIME ft_begin,ft_end;   
    //从160111日到今天的纳秒数,是另一种类型结构体
    SystemTimeToFileTime(&time_begin,&ft_begin);
    SystemTimeToFileTime(&time_end,&ft_end);   
    //相当于对filetime进行的初始化
    /*typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;包括高位和低位,并不能直接相减,这里引入一个联合体ULARGE_INTEGER*/  
    ULARGE_INTEGER u_begin,u_end;
    u_begin.u.HighPart=ft_begin.dwHighDateTime;
    u_begin.u.LowPart=ft_begin.dwLowDateTime;
    u_end.u.HighPart=ft_end.dwHighDateTime;
    u_end.u.LowPart=ft_end.dwLowDateTime;
    ULONGLONG ull_span;//用来存差值(纳秒)
    ull_span=u_begin.QuadPart>=u_end.QuadPart?(u_begin.QuadPart-u_end.QuadPart):(u_end.QuadPart-u_begin.QuadPart); //三目运算符

    ULONGLONG ull_seconds=ull_span/10000000;
    int n_minutes=ull_seconds/60;
    int n_hours=n_minutes/60;
    int n_day=n_hours/24;//计算相应的日时分秒

CString StrOutput;
    StrOutput.Format(L"秒数:%d\r\n分钟数:%d\r\n小时数:%d\r\n天数:%d\r\n",(int)ull_seconds,n_minutes,n_hours,n_day);
    SetDlgItemTextW(IDC_EDIT_OUTPUT,StrOutput);

编译一下,大功告成!
这里写图片描述

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值