COleDateTime和COleDateTimeSpan类详细分析
来源:互联网 发布:如何在icloud恢复数据 编辑:程序博客网 时间:2024/05/22 13:50
在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秒大,反之亦然,例如:
运行的结果是:1899-12-30 00:00:00
运行的结果是:2007-10-28 10:30:20
反过来以可以得到变量的值,例如:
运行的结果是:38349.932199
COleDateTimeSpan类是用于对COleDateTime类的两个时间的时间间隔的计算,COleDateTimeSpan类使用的成员变量COleDateTimeSpan::m_span是一个double类型是用于记录两个COleDateTime::m_dt的时间差,例如:
运行的结果是:365.000000
反过来也可以得到日期
运行的结果是:02/05/07 00:00:00
可是在使用COleDateTimeSpan类中以下的几个函数可要小心,这不知道是不是MFC的一个Bug,
double GetTotalDays( ) const;
double GetTotalHours( ) const;
double GetTotalMinutes( ) const;
double GetTotalSeconds( ) const;
几个函数的返回值都是double类型
但是,如double GetTotalSeconds( ) const;在MFC内部的原形是:
看到没有,它返回的实际是个long类型,并不是一个double类型,所以在使用这几个函数的时候计算两个时间的间隔不要太大,特别是GetTotalSeconds( )函数,如计算两个时间的间隔大于68年时就会溢出,所以我建议直接读取COleDateTimeSpan::m_span变量的值,这是一个单位为日的时间间隔,例如:
运行的结果是:-2085892096.000000
这个结果明显是一个溢出,如果使用
str.Format("%f",ts.m_span*86400);
则会得到2209075200.000000。
所以灵活使用COleDateTime类的m_dt变量和COleDateTimeSpan类的m_span变量操作会得到意想不到的收获
- COleDateTime和COleDateTimeSpan类详细分析
- COleDateTime和COleDateTimeSpan类
- 深度剖析COleDateTime和COleDateTimeSpan类
- 深度剖析COleDateTime和COleDateTimeSpan类
- CTime和CTimeSpan与COleDateTime和COleDateTimeSpan 类
- Windows中如何计算时间间隔(2)COleDateTime 和COleDateTimeSpan类
- CTime、CTimeSpan、COleDateTime、COleDateTimeSpan
- MFC时间类的使用(CTime、CTimeSpan、COleDateTime、COleDateTimeSpan)
- 有关CTime和ColeDateTime
- 有关CTime和ColeDateTime
- CTime和COleDateTime
- CString 时间字符串、COleDateTime 和 CTime 类之间的转换
- CString 时间字符串、COleDateTime 和 CTime 类之间的转换
- CString 时间字符串、COleDateTime 和 CTime 类之间的转换
- COleDateTime类 CTime类
- CTime和COleDateTime的区别
- CString、CTime和COleDateTime转换
- CString、CTime和COleDateTime转换
- erlang的函数与流程控制【一】
- struts2导出excel文件
- Linux——Crontab
- 在基本档案自定义项中增加自定义项后,数据库里如何查询
- html input中 button和submit的区别 (转帖)
- COleDateTime和COleDateTimeSpan类详细分析
- Linux 重启命令
- Axis使用
- android 平台的RNDIS功能
- UL公司加大在华投资 推动国际贸易和市场准入标准
- 【转】配置MySQL主从复制(Replication)服务
- 幼儿纺织品标准将提高 购买应注意检测报告
- 面试题
- 表数据的copy,insert into select/select into from