Windows中如何计算时间间隔(1)使用CTime 和CTimeSpan

时间函数在我们的程序中是使用频率较高的函数,现将其归纳总结一下,这一章主要讲下CTime 和CTimeSpan,前者表示一个时间点,而后表示一个时间段。CTime代表的是绝对时间,CTime andCTimeSpan 没有虚函数,大部分函数为内联函数,类对象的大小都为8.

CTime
1.构造初始化CTime类对象
CTime类有下列构造函数:
CTime();
CTime(const CTime& timeSrc );
CTime(time_t time )
CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 );
CTime(WORD wDosDate, WORD wDosTime, int nDST = -1);
CTime(const SYSTEMTIME& sysTime, int nDST = -1);
CTime(const FILETIME& fileTime, int nDST = -1):
说明:以不同的方式构造一个CTime对象。可以用一个已经存在的CTime对象或一个time_t(在time.h中被定义为long)类型变量来构造初始化CTime对象,也可以用年、月、日、小时、分、秒来构造初始化CTime对象,还可以用SYSTEMTIME、FILETIME结构来构造初始化CTime对象。SYSTEMTIME、FILETIME结构定义如下:
typedef struct _SYSTEMTIME {
<wbr><wbr><wbr><wbr><wbr> WORD wYear;<br><wbr><wbr><wbr><wbr><wbr> WORD wMonth;<br><wbr><wbr><wbr><wbr><wbr> WORD wDayOfWeek;<br><wbr><wbr><wbr><wbr><wbr> WORD wDay;<br><wbr><wbr><wbr><wbr><wbr> WORD wHour;<br><wbr><wbr><wbr><wbr><wbr> WORD wMinute;<br><wbr><wbr><wbr><wbr><wbr> WORD wSecond;<br><wbr><wbr><wbr><wbr><wbr> WORD wMilliseconds;<br> } SYSTEMTIME;<br> typedef struct _FILETIME {<br><wbr><wbr><wbr><wbr><wbr> DWORD dwLowDateTime;<wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr> DWORD dwHighDateTime;<wbr><wbr><wbr><br> } FILETIME, *PFILETIME, *LPFILETIME;<br> 2.时间值的提取函数<br> (1)<span style="color:#ff0000">GetCurrentTime()</span><wbr><wbr><wbr><wbr> 获取系统当前时间。<br> 原型:static <strong style="color:black; background-color:#ffff66">CTime</strong> PASCAL GetCurrentTime();<br> (2)<span style="color:#ff0000">GetTime()</span><wbr><wbr> 由<strong style="color:black; background-color:#ffff66">CTime</strong>对象返回一个time_t变量。<br> 原型:time_t GetTime()const;<br> (3)<span style="color:#ff0000">GetYear()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的年。<br> 原型:int GetYear()const;<br> 以下(4)至(9)函数原型与GetYear()类似。<br> (4)<span style="color:#ff0000">GetMonth()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的月。<br> (5)<span style="color:#ff0000">GetDay()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的日期。<br> (6)<span style="color:#ff0000">GetHour()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的小时。<br> (7)<span style="color:#ff0000">GetMinute()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的分。<br> (8)<span style="color:#ff0000">GetSecond()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的秒。<br> (9)<span style="color:#ff0000">GetDayOfWeek()</span>获取<strong style="color:black; background-color:#ffff66">CTime</strong>对象代表的星期几,1代表周日、2代表周一、等等。<br> 3.格式化时间<br> 成员函数Format() 将<strong style="color:black; background-color:#ffff66">CTime</strong>对象中的时间信息转化为一个格式化的字符串。其函数原型为:<br><span style="color:#ff0000">CString Format(LPCTSTR pFormat) const;<br> CString Format(UINT nFormatID) const;<br></span>参数pFormat是格式字符串,类似于printf中的格式字符串,格式字符如下:<br> %a:周的英文缩写形式;<br> %A:周的英文全名形式;<br> %b: 月的英文缩写形式;<br> %B:月的英文全名形式;<br> %c: 完整的日期<strong style="color:black; background-color:#a0ffff">和</strong>时间;<br> %d:十进制形式的日期(01-31);<br> %H:24小时制的小时(00-23);<br> %I: 12小时制的小时(00-11);<br> %j: 十进制表示的一年中的第几天(001-366);<br> %m: 月的十进制表示(01-12);<br> %M:十进制表示的分钟(00-59);<br> %p: 12小时制的上下午标示(AM/PM);<br> %S: 十进制表示的秒(00-59);<br> %U: 一年中的第几个星期(00-51),星期日是一周的第一天;<br> %W: 一年中的第几个星期(00-51),星期一是一周的第一天;<br> %w: 十进制表示的星期几(0-6);<br> %Y: 十进制表示的年;<br> 参数nFormatID 是格式字符串资源的ID号。<br> 4.重载运算符<br> operator = :<wbr><wbr><wbr> 赋予新的时间。<br> operator + :<wbr><wbr><wbr> 增加<strong style="color:black; background-color:#ffff66">CTime和</strong>CTimeSpan对象。<br> operator – :<wbr><wbr><wbr> 减小<strong style="color:black; background-color:#ffff66">CTime和</strong>CTimeSpan对象。<br> operator += : <strong style="color:black; background-color:#ffff66">CTime</strong>对象加一个CTimeSpan对象。<br> operator -= :<wbr><wbr><wbr><strong style="color:black; background-color:#ffff66"> CTime</strong>对象减一个CTimeSpan对象。<br> operator == :<wbr><wbr><wbr> 比较两个绝对时间是否相等。<br> operator != :<wbr><wbr><wbr> 比较两个绝对时间是否不相等。<br> operator &gt; :<wbr><wbr><wbr> 比较两个绝对时间,是否前一个大于后一个。<br> operator &lt; :<wbr><wbr><wbr> 比较两个绝对时间,是否前一个小于后一个。<br> operator &gt;=<wbr><wbr><wbr> : 比较两个绝对时间,是否前一个大于等于后一个。<br> operator &lt;=<wbr><wbr><wbr> : 比较两个绝对时间,是否前一个小于等于后一个。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

The upper date limit is 12/31/3000. The lower limit is 1/1/1970 12:00:00 AM GMT.<wbr></wbr>

CTimeSpan类

The CTimeSpan object is stored in a __time64_t structure, which is 8 bytes.
1.构造函数。
CTimeSpan类有下列构造函数
(1)CTimeSpan() ;
(2)CTimeSpan(const CTimeSpan& timeSpanSrc);
(3)CTimeSpan(time_t time)

(4)CTimeSpan(LONG lDays, int nHours, int nMins, int nSecs);
参数timeSpanSrc为一个已存在的 CTimeSpan 对象,time为一个time_t 类型的时间值,lDays, nHours, nMins, nSecs分别为天数、小时数、分数秒数。
2.时间值的提取函数
(1)GetDays()获得CTimeSpan类对象中包含的完整的天数。
(2)GetHours()<wbr> 获得当天的小时数,值在-23到23之间。<br> (3)<span style="color:#ff0000">GetTotalHours()</span><wbr><wbr><wbr><wbr> 获得CTimeSpan类对象中包含的完整的小时数。<br> (4)<span style="color:#ff0000">GetMinutes()</span><wbr><wbr><wbr> 获得当前小时包含的分数,值在-59到59之间。<br> (5)<span style="color:#ff0000">GetTotalMinutes()</span><wbr> 获得CTimeSpan类对象中包含的完整的分数。<br> (6)<span style="color:#ff0000">GetSeconds()</span><wbr><wbr> 获得当前分钟包含的秒数,值在-59到59之间。<br> (7)<span style="color:#ff0000">GetTotalSeconds()</span><wbr><wbr><wbr> 获得CTimeSpan类对象中包含的完整的秒数。<br> 格式化时间<br><span style="color:#ff0000">Format()</span>将一个CTimeSpan对象转换成格式字符串。使用方式与<strong style="color:black; background-color:#ffff66">CTime</strong>类似,格式化字符包括以下几个:<br> %D:<wbr><wbr><wbr><wbr> CTimeSpan的总天数;<br> %H:<wbr><wbr><wbr><wbr> 不足整天的小时数;<br> %M:<wbr><wbr><wbr><wbr> 不足1小时的分数;<br> %S:<wbr><wbr><wbr><wbr> 不足1分钟的秒数;<br> %%:<wbr><wbr><wbr><wbr> 百分号。<br> 4.重载运算符<br> CTimeSpan类也重载了运算符“=”,“+”,“-”,“+=”,“-=”,“==”,“!=”,“&lt;”,“&gt;”,“&lt;=”,“&gt;=”,用于CTimeSpan对象的赋值、加减运算及两个CTimeSpan对象的比较。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

eg.

#include <iostream>
#include <atltime.h>

using namespace std;

void main()
{
<wbr><wbr><wbr> // <strong style="color:black; background-color:#ffff66">CTime</strong> 函数<br><wbr><wbr><wbr><strong style="color:black; background-color:#ffff66">CTime</strong> curtime =<strong style="color:black; background-color:#ffff66">CTime</strong>::GetCurrentTime();</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> int<wbr> iyear = curtime.GetYear();<br><wbr><wbr><wbr> int<wbr> imonth = curtime.GetMonth();<br><wbr><wbr><wbr> int<wbr> iday = curtime.GetDay();<br><wbr><wbr><wbr> int<wbr> idayofweek = curtime.GetDayOfWeek();<br><wbr><wbr><wbr> int<wbr> ihour = curtime.GetHour();<br><wbr><wbr><wbr> int<wbr> iminute = curtime.GetMinute();<br><wbr><wbr><wbr> int<wbr> isecond = curtime.GetSecond();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> cout&lt;&lt;"当前时间:"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;iyear&lt;&lt;"年";<br><wbr><wbr><wbr> cout&lt;&lt;imonth&lt;&lt;"月";<br><wbr><wbr><wbr> cout&lt;&lt;iday&lt;&lt;"日";<br><wbr><wbr><wbr> cout&lt;&lt;ihour&lt;&lt;"时";<br><wbr><wbr><wbr> cout&lt;&lt;iminute&lt;&lt;"分";<br><wbr><wbr><wbr> cout&lt;&lt;isecond&lt;&lt;"秒"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;"星期"&lt;&lt;idayofweek&lt;&lt;"(周日算1)"&lt;&lt;endl&lt;&lt;endl;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> // 时间比较<br><wbr><wbr><wbr><strong style="color:black; background-color:#ffff66">CTime</strong> begintime =<strong style="color:black; background-color:#ffff66">CTime</strong>(2006,1,1,0,0,0);<br><wbr><wbr><wbr> cout&lt;&lt;"起始时间:"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetYear()&lt;&lt;"年";<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetMonth()&lt;&lt;"月";<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetDay()&lt;&lt;"日";<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetHour()&lt;&lt;"时";<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetMinute()&lt;&lt;"分";<br><wbr><wbr><wbr> cout&lt;&lt;begintime.GetSecond()&lt;&lt;"秒"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;"星期"&lt;&lt;begintime.GetDayOfWeek()&lt;&lt;"(周日算1)"&lt;&lt;endl&lt;&lt;endl;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> CTimeSpan span;<br><wbr><wbr><wbr> span = curtime - begintime;<br><wbr><wbr><wbr> cout&lt;&lt;"两时间相差:"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;span.GetDays()&lt;&lt;"天";<wbr><wbr><wbr><br><wbr><wbr><wbr> cout&lt;&lt;span.GetHours()&lt;&lt;"小时";<wbr><wbr><wbr><br><wbr><wbr><wbr> cout&lt;&lt;span.GetMinutes()&lt;&lt;"分";<wbr><wbr><wbr><br><wbr><wbr><wbr> cout&lt;&lt;span.GetSeconds()&lt;&lt;"秒"&lt;&lt;endl;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> cout&lt;&lt;"总小时"&lt;&lt;span.GetTotalHours()&lt;&lt;"小时"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;"总分钟"&lt;&lt;span.GetTotalMinutes()&lt;&lt;"分"&lt;&lt;endl;<br><wbr><wbr><wbr> cout&lt;&lt;"总秒"&lt;&lt;span.GetTotalSeconds()&lt;&lt;"秒"&lt;&lt;endl;<wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> cout&lt;&lt;endl;<br><wbr><wbr><wbr> // <strong style="color:black; background-color:#ffff66">CTime</strong>到CString的转化<br><wbr><wbr><wbr> CString strtime;<br><wbr><wbr><wbr> strtime = curtime.Format(_T("%Y-%m-%d %X"));<br><wbr><wbr><wbr><br><wbr><wbr><wbr> wcout&lt;&lt;(LPCTSTR)strtime&lt;&lt;endl; // 因为使用UNICODE,或用下面的方面显示<br><wbr><wbr><wbr> wcout&lt;&lt;strtime.GetString()&lt;&lt;endl;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> system("pause");<br> }</wbr></wbr></wbr>

结果为

当前时间:
2011年2月16日20时37分3秒
星期4(周日算1)

起始时间:
2006年1月1日0时0分0秒
星期1(周日算1)

两时间相差:
1872天20小时37分3秒
总小时44948小时
总分钟2696917分
总秒161815023秒

2011-02-16 20:37:03
2011-02-16 20:37:03
请按任意键继续. . .

<wbr></wbr>

注意:

在控制台中使用cout显示CString类,

std::cout不支持宽字符,如果需要使用UNICODE,需要使用std::wcout输出宽字符。同时,需要对CString做一下转换,LPCTSTR(cpath)或者wcout<<cpath.GetString()<<endl;;或者使用NotSet或者Multi-CharSet就可以使用cout输出了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值