深度剖析COleDateTime和COleDateTimeSpan类

本文详细介绍了MFC中COleDateTime和COleDateTimeSpan类的使用,这两个类能处理更广泛的日期时间范围,避免了CTime类的限制。COleDateTime基于DATE类型,其m_dt成员表示从1899年12月30日起的天数。COleDateTimeSpan用于计算时间间隔,m_span成员记录两个日期间的差值(以天为单位)。需要注意的是,COleDateTimeSpan的GetTotalSeconds等函数可能会导致溢出问题,建议直接使用m_span进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MFC中操作时间的类主要有两对:CTime和CTimeSpan与COleDateTime和COleDateTimeSpan,CTime和CTimeSpan主要封装了ANSI time_t和关于time_t的Run-Time库的主要函数,CTime里面使用的成员变量是time_t类型,该类型是个long型,由于long类型的原因,所以该类只能处理4294967296秒约68年的数据,所以用CTime只能处理1970年到2038年的日期。
    幸好,MFC同时提供了COleDateTime和COleDateTimeSpan类,使用该两个类完全可以代替CTime和CTimeSpan,COleDateTime和COleDateTimeSpan类所使用的成员变量是DATE类型,该类型是个double类型,而且使用的单位是日,所以可以处理从100年1月1日到9999年12月31日的日期时间,COleDateTime类的日期计算主要是操作公有成员变量COleDateTime::m_dt,该变量是DATE即double类型,该变量是为零时是1899年12月30日0时0分0秒,大于零时的日期比1899年12月30日0时0分0秒大,反之亦然,例如:
 COleDateTime t;
 t.m_dt=0;
 AfxMessageBox(t.Format("%Y-%m-%d %H:%M:%S"));
运行的结果是:1899-12-30 00:00:00

 COleDateTime t;
 t.m_dt=39444.437731;
 AfxMessageBox(t.Format("%Y-%m-%d %H:%M:%S"));
运行的结果是:2007-10-28 10:30:20

反过来以可以得到变量的值,例如:
 COleDateTime t(2004,12,28,22,22,22);
 CString str;
 str.Format("%f",t.m_dt);
 AfxMessageBox(str);
运行的结果是:38349.932199<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值