首页 > 编程知识 正文

gettimeofday 头文件,coledatetimespan

时间:2023-05-05 08:05:34 阅读:109792 作者:301

COleDateTime类本身不提供用于检索对象的time_t的接口,必须使用CTime的GetTime () )进行检索

coledatetimet1=cole datetime : get current time (;

系统时间系统;

T1.getassystemtime(systime;

ctimeCCT1(systime );

cout cct1.GetTime () endl;

MFC有两个基于cole datetime (基于date )和ctime (_ time 64 _ t )的类

如果绑定了日期类型控件,请确保使用COleDatetime! CTime到3000年为止是正确的,但是超过这个范围的话,CTime会抛出异常并使程序崩溃!

在MFC上操作时间的类主要有两组。 CTime和CTimeSpan以及COleDateTime和COleDateTimeSpan、CTime和CTimeSpan主要封装了有关ANSI time_t和time_t的Run-Time库的主要函数。 CTime此类型为long类型,long类型只能处理大约68年的4294967296秒的数据,因此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秒

酷睿数据时间t;

t.m_dt=0;

afxmessagebox (t.format (% y-% m-% d % h : % m 3360 % s ) );

运行结果为1899-12-30 00:00:00

酷睿数据时间t;

t.m_dt=39444.437731;

afxmessagebox (t.format (% y-% m-% d % h : % m 3360 % s ) );

执行结果: 2007-10-28 10:30:20

相反,可以按如下方式获得变量值:

coledatetimet(2004、12、28、22、22、22 );

CString str;

str.format('%f”,t.m_dt );

afxmessagebox(str;

执行结果: 38349.932199

COleDateTimeSpan类用于计算COleDateTime类的两个时间间隔,COleDateTimeSpan类为两个coledatetimespan :3360 m _ span为一个双精度类型,两个double

coledatetimet1(2006,1,1,0,0,0 );

coledatetimet2(2007,1,1,0,0,0 );

COleDateTimeSpan ts=t2-t1;

CString str;

str.format('%f”,ts.m_span );

afxmessagebox(str;

执行结果: 365.000000

相反,也可以得到日期

coledatetimet1(2006,1,1,0,0,0 );

COleDateTimeSpan ts;

ts.m_span=400.0;

COleDateTime t2=t1 ts;

afxmessagebox(T2.format ) ' %c ' );

运转结果: 02/05/07 00:00:00

但是,在使用COleDateTimeSpan类时,请注意以下几个函数: 我不知道这是不是MFC的错误。

double GetTotalDays () const;

double GetTotalHours () const;

双地理空间() const;

double GetTotalSeconds () const;

一些函数的返回值都是double类型

但是,例如double GetTotalSeconds () const; 在MFC内部的真实身份如下。

_ afx disp _ inlinedoublecoledatetimespan : gettotalseconds () const

{assert(getstatus ()==valid );

longlreturns=(long ) ) m _ span * 24 * 60 * 60 afx _ ole _ datetime _ half second );

返回l返回;

}

不,实际上返回的是long类型,不是double类型,所以使用这些函数时两个时间之间的间隔不要太大。 尤其是GetTotalSeconds ) )函数,建议直接读取coledatetimespan:33333,因为如果计算两个时间间隔超过68年,则会溢出

coledatetimet1(2000,1,1,0,0,0 );

coledatetimet2(2070,1,1,0,0,0 );

COleDateTimeSpan ts=t2-t1;

CString str;

str.format('%f”,ts.GetTotalSeconds ) );

afxmessagebox(str;

的结果是-2085892096.000000

这个结果明显溢出,如果使用的话

str.format('%f”,ts.m_span*86400 );

得到2209075200.000000。

因此,利用COleDateTime类的m_dt和COleDateTimeSpan类的m_span变量进行操作会产生意想不到的结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。