日期和时间类简介
CTime 类的对象表示的时间是基于格林威治标准时间(GMT)的。CTimeSpan 类的对 象表示的是时间间隔。
CTime 类和 CTimeSpan 类一般不会被继承使用。两者对象的大小都是 8 个字节。
CTime 表示的日期上限是 3000 年 12 月 31 日,下限是 1970 年 1 月 1 日 12:00:00 A M GMT。
CTime 类的主要成员函数
下面列出 CTime 类的主要成员函数,并加以讲解。
CTime();
构造一个未经初始化的 CTime 对象。此构造函数使我们可以定义一个 CTime 对象的 数组,在使用数组前需要以有效的时间值为其初始化。
CTime(__time64_t time);
以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个 CTime 对 象。参数 time 是一个__time64_t 类型的值,表示自 GMT 时间 1970 年 1 月 1 日零点以来 的秒数,这里要注意的是,参数 time 代表的时间会转换为本地时间保存到构造的 CTime 对 象中。例如,我们传递参数 0 构造一个 CTime 对象,然后调用 CTime 对象的 GetHour 成 员函数将返回 8,因为参数 0 代表的 GMT 时间转换为北京时间后为 1970 年 1 月 1 日 8:0 0:00。
CTime( int nYear,
int nMonth,
int nDay,
int nMin,
int nSec,
int nDST = -1
);
以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造 CTime 对象。参数 n Year、nMonth、nDay、nHour、nMin、nSec 分别表示年、月、日、小时、分钟、秒,取值 范围如下:
参数 nDST 指定是否实行夏令时,为 0 时表示实行标准时间,为正数时表示实行夏令 时,为负数时由系统自动计算实行的是标准时间还是夏令时。
**CTime(const SYSTEMTIME& st,int nDST = - 1) ;**
以一个 SYSTEMTIME 结构体变量来构造 CTime 对象。SYSTEMTIME 结构体也是我 们对日期时间的常用表示方式。参数 st 为以本地时间表示的 SYSTEMTIME 对象,参数 nD ST 同上。
**static CTime WINAPI GetCurrentTime( );**
获取系统当前日期和时间。返回表示当前日期和时间的 CTime 对象。
**int GetYear( ) const;**
获取 CTime 对象表示时间的年份。范围从 1970 年 1 月 1 日到 2038 年(包括 2038 年)1 月 18 日。
**`int GetMonth( ) const;`**
获取 CTime 对象表示时间的月份。范围为 1 到 12。
**int GetDay( ) const;
获取 CTime 对象表示时间的日期。范围为 1 到 31。**
**int GetHour( ) const;
获取 CTime 对象表示时间的小时。范围为 0 到 23。**
**int GetMinute( ) const;
获取 CTime 对象表示时间的分钟。范围为 0 到 59。**
**int GetSecond( ) const;
获取 CTime 对象表示时间的秒。范围为 0 到 59。**
**int GetDayOfWeek( ) const;
此函数的返回值表示 CTime 对象代表的是星期几,1 表示是周日,2 表示是周一,以 此类推。**
**CString Format(LPCTSTR pszFormat) const;
将 CTime 对象中的时间信息格式化为字符串。参数 pszFormat 是格式化字符串,与 p rintf 中的格式化字符串类似,格式化字符串中带有%前缀的格式码将会被相应的 CTime 时 间分量代替,而其他字符会原封不动的拷贝到返回字符串中。格式码及含义如下:**
%a:周的英文缩写形式。
%A:周的英文全名形式。
%B:月的英文全名形式。
%d:十进制形式的日期(01-31)。
%H:24 小时制的小时(00-23)。
%j: 十进制表示的一年中的第几天(001-366)。
%m: 月的十进制表示(01-12)。
%M:十进制表示的分钟(00-59)。
%p: 12 小时制的上下午标示(AM/PM)。
%S: 十进制表示的秒(00-59)。
%U: 一年中的第几个星期(00-51),星期日是一周的第一天。
%W: 一年中的第几个星期(00-51),星期一是一周的第一天。
%w: 十进制表示的星期几(0-6)。
%Y: 十进制表示的年。
**CTime operator +(CTimeSpan timeSpan) const;
将 CTime 对象和 CTimeSpan 对象相加,返回一个 CTime 对象。实际意义就是在一个 时间的基础上推后一个时间间隔,得到一个新的时间。**
**CTime operator -(CTimeSpan timeSpan) const;
将 CTime 对象和一个 CTimeSpan 相减,返回一个 CTime 对象。实际意义就是在一个 时间的基础上提前一个时间间隔,得到一个新的时间。**
**CTimeSpan operator -(CTime time) const;
将该 CTime 对象和另一个 CTime 对象相减,返回一个 CTimeSpan 对象。实际意义就 是计算两个时间点的间隔,得到一个 CTimeSpan 对象。**
**CTime& operator +=(CTimeSpan span);
为该 CTime 对象增加一个 span 表示的时间间隔。**
**CTime& operator -=(CTimeSpan span);
为该 CTime 对象减去一个 span 表示的时间间隔。**
**CTime& operator =(__time64_t time);
为该 CTime 对象赋予一个新的时间值。**
简单说下剩下的几个重载 i 运算符:
operator == : 比较两个绝对时间是否相等。
operator != : 比较两个绝对时间是否不相等。
operator > : 比较两个绝对时间,是否前一个大于后一个。 operator < : 比较两个绝对时间,是否前一个小于后一个。 operator >= : 比较两个绝对时间,是否前一个大于等于后一个。 operator <= : 比较两个绝对时间,是否前一个小于等于后一个。
**CTimeSpan 类的主要成员函数**
前面介绍了 CTime 类的成员函数,再来看 CTimeSpan 类的成员函数就比较容易了,
这里只做简单介绍。
CTimeSpan( );
构造一个未经初始化的 CTimeSpan 对象。
CTimeSpan(__time64_t time);
CTimeSpan( LONG lDays, int nHours, int nMins, int nSecs );
以天、小时、分钟、秒等时间分量来构造 CTimeSpan 对象。每个时间分量的取值范围 如下: 时间分量 取值范围
lDays 0-25000(大约) nHours 0-23 nMins 0-59 nSecs 0-59
GetDays():获得 CTimeSpan 类对象中包含的完整的天数。
GetHours():获得当天的小时数,取值范围为-23 到 23。
GetTotalHours():获得 CTimeSpan 类对象中包含的完整的小时数。
GetMinutes():获得当前小时包含的分数,取值范围为-59 到 59。
GetTotalMinutes():获得 CTimeSpan 类对象中包含的完整的分数。
GetSeconds():获得当前分钟包含的秒数,取值范围为-59 到 59。
GetTotalSeconds():获得 CTimeSpan 类对象中包含的完整的秒数。
CString Format(LPCTSTR pszFormat) const;
将一个 CTimeSpan 对象格式化为字符串。使用方式与 CTime::Format 类似,格式码 及含义如下:
%D:CTimeSpan 对象中的总天数;
%M:不足 1 小时的分钟数;
%%:百分号。
另外,CTimeSpan 类也重载了运算符“=”,“+”, “-”,“+=”, “-=”,“==”,“!=”,“<”,“>”,“<=”,“>=”,用于 CTimeSpan 对象的赋值、加减运算及两个 CTimeSpan 对象的比较。