【VS开发】CTimeSpan类
CTimeSpan類。
?????? 日期和時間類簡介
?????? CTime類的對象表示的時間是基于格林威治標準時間(GMT)的。CTimeSpan類的對象表示的是時間間隔。
?????? CTime類和CTimeSpan類一般不會被繼承使用。兩者對象的大小都是8個字節(jié)。
?????? CTime表示的日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM GMT。
?????? CTime類的主要成員函數(shù)
?????? 下面列出CTime類的主要成員函數(shù),并加以講解。
?????? CTime();
?????? 構(gòu)造一個未經(jīng)初始化的CTime對象。此構(gòu)造函數(shù)使我們可以定義一個CTime對象的數(shù)組,在使用數(shù)組前需要以有效的時間值為其初始化。
?????? CTime(__time64_t time);
?????? 以一個__time64_t(注意:最前面的下劃線有兩條)類型的數(shù)據(jù)來構(gòu)造一個CTime對象。參數(shù)time是一個__time64_t類型的值,表示自GMT時間1970年1月1日零點以來的秒數(shù),這里要注意的是,參數(shù)time代表的時間會轉(zhuǎn)換為本地時間保存到構(gòu)造的CTime對象中。例如,我們傳遞參數(shù)0構(gòu)造一個CTime對象,然后調(diào)用CTime對象的GetHour成員函數(shù)將返回8,因為參數(shù)0代表的GMT時間轉(zhuǎn)換為北京時間后為1970年1月1日 8:00:00。
CTime(
?? int nYear,
?? int nMonth,
?? int nDay,
?? int nHour,
?? int nMin,
?? int nSec,
?? int nDST = -1?
);
?????? 以本地時間的年、月、日、小時、分鐘、秒等幾個時間分量構(gòu)造CTime對象。參數(shù)nYear、nMonth、nDay、nHour、nMin、nSec分別表示年、月、日、小時、分鐘、秒,取值范圍如下:
時間分量取值范圍
nYear1970-3000
nMonth1-12
nDay1-31
nHour0-23
nMin0-59
nSec0-59
?????? 參數(shù)nDST指定是否實行夏令時,為0時表示實行標準時間,為正數(shù)時表示實行夏令時,為負數(shù)時由系統(tǒng)自動計算實行的是標準時間還是夏令時。
?????? CTime(const SYSTEMTIME& st,int nDST = - 1) ;
?????? 以一個SYSTEMTIME結(jié)構(gòu)體變量來構(gòu)造CTime對象。SYSTEMTIME結(jié)構(gòu)體也是我們對日期時間的常用表示方式。參數(shù)st為以本地時間表示的SYSTEMTIME對象,參數(shù)nDST同上。
?????? static CTime WINAPI GetCurrentTime( );
?????? 獲取系統(tǒng)當前日期和時間。返回表示當前日期和時間的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;
?????? 此函數(shù)的返回值表示CTime對象代表的是星期幾,1表示是周日,2表示是周一,以此類推。
?????? CString Format(LPCTSTR pszFormat) const;
?????? 將CTime對象中的時間信息格式化為字符串。參數(shù)pszFormat是格式化字符串,與printf中的格式化字符串類似,格式化字符串中帶有%前綴的格式碼將會被相應的CTime時間分量代替,而其他字符會原封不動的拷貝到返回字符串中。格式碼及含義如下:
%a:周的英文縮寫形式。
%A:周的英文全名形式。
%b: 月的英文縮寫形式。
%B:月的英文全名形式。
%c: 完整的日期和時間。
%d:十進制形式的日期(01-31)。
%H:24小時制的小時(00-23)。
%I: 12小時制的小時(00-11)。
%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對象。實際意義就是在一個時間的基礎(chǔ)上推后一個時間間隔,得到一個新的時間。
?????? CTime operator -(CTimeSpan timeSpan) const;
?????? 將CTime對象和一個CTimeSpan相減,返回一個CTime對象。實際意義就是在一個時間的基礎(chǔ)上提前一個時間間隔,得到一個新的時間。
?????? 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類的主要成員函數(shù)
?????? 前面介紹了CTime類的成員函數(shù),再來看CTimeSpan類的成員函數(shù)就比較容易了,這里只做簡單介紹。
?????? CTimeSpan( );
?????? 構(gòu)造一個未經(jīng)初始化的CTimeSpan對象。
?????? CTimeSpan(__time64_t time);
?????? 以一個__time64_t類型的數(shù)據(jù)來構(gòu)造CTimeSpan對象,參數(shù)time的含義上面CTime(__time64_t time)的講解。
CTimeSpan(
?? LONG lDays,
?? int nHours,
?? int nMins,
?? int nSecs?
);
?????? 以天、小時、分鐘、秒等時間分量來構(gòu)造CTimeSpan對象。每個時間分量的取值范圍如下:
時間分量取值范圍
lDays0-25000(大約)
nHours0-23
nMins0-59
nSecs0-59
?????? GetDays():獲得CTimeSpan類對象中包含的完整的天數(shù)。
?????? GetHours():獲得當天的小時數(shù),取值范圍為-23到23。
?????? GetTotalHours():獲得CTimeSpan類對象中包含的完整的小時數(shù)。
?????? GetMinutes():獲得當前小時包含的分數(shù),取值范圍為-59到59。
?????? GetTotalMinutes():獲得CTimeSpan類對象中包含的完整的分數(shù)。
?????? GetSeconds():獲得當前分鐘包含的秒數(shù),取值范圍為-59到59。
?????? GetTotalSeconds():獲得CTimeSpan類對象中包含的完整的秒數(shù)。
?????? CString Format(LPCTSTR pszFormat) const;
?????? 將一個CTimeSpan對象格式化為字符串。使用方式與CTime::Format類似,格式碼及含義如下:
?????? %D:CTimeSpan對象中的總天數(shù);
?????? %H:不足整天的小時數(shù);
?????? %M:不足1小時的分鐘數(shù);
?????? %S:不足1分鐘的秒數(shù);
?????? %%:百分號。
?????? 另外,CTimeSpan類也重載了運算符“=”,“+”,“-”,“+=”,“-=”,“==”,“!=”,“<”,“>”,“<=”,“>=”,用于CTimeSpan對象的賦值、加減運算及兩個CTimeSpan對象的比較。
?????? CTime類和CTimeSpan類的應用實例
?????? 雞啄米在下面將為大家演示如何得到當前時間、計算兩個時間的時間差以及CTime對象怎樣格式化為字符串等。具體步驟如下:
?????? 1. 創(chuàng)建一個Win32 Console Application工程,Name設(shè)為“Example43”。
?????? 2. 因為要使用到CTime類、CTimeSpan類和cout輸出流,所以在Example43.cpp文件中包含相應的頭文件:
C++代碼
#include "atltime.h"????
#include <iostream>????
using namespace std;?
??????? 3. 修改main函數(shù)如下:
C++代碼
int _tmain(int argc, _TCHAR* argv[])????
{????
??? CString strTime;? // 用于將CTime對象格式化為字符串????
??? // 獲取當前時間并保存到curTime????
??? CTime curTime = CTime::GetCurrentTime();????
???
??? int nYear = curTime.GetYear();? // 獲取當前年份????
??? int nMonth = curTime.GetMonth(); // 獲取當前月份????
??? int nDay = curTime.GetDay();?? // 獲取當前日期????
??? int nHour = curTime.GetHour();? // 獲取當前小時時間????
??? int nMin = curTime.GetMinute(); // 獲取當前分鐘時間????
??? int nSec = curTime.GetSecond(); // 獲取當前秒時間????
???
??? // 輸出當前時間????
??? cout<<"當前時間:"<<endl;????
??? cout<<nYear<<"年"<<nMonth<<"月"<<nDay<<"日"<<nHour<<"時"<<nMin<<"分"<<nSec<<"秒"<<endl;????
???
??? // 為計算時間差,設(shè)定一個起始時間并輸出????
??? CTime startTime = CTime(2010,7,3,10,20,30);????
??? cout<<"起始時間:"<<endl;????
??? cout<<startTime.GetYear()<<"年"<<startTime.GetMonth()<<"月"<<startTime.GetDay()<<"日"<<startTime.GetHour()<<"時"<<startTime.GetMinute()<<"分"<<startTime.GetSecond()<<"秒"<<endl;????
???
??? // 計算時間差????
??? CTimeSpan timeSpan;????
??? timeSpan = curTime - startTime;????
??? cout<<"兩時間相差:"<<endl;????
??? cout<<timeSpan.GetDays()<<"天"<<timeSpan.GetHours()<<"小時"<<timeSpan.GetMinutes()<<"分"<<timeSpan.GetSeconds()<<"秒"<<endl;????
??? cout<<"總小時數(shù):"<<timeSpan.GetTotalHours()<<"小時"<<endl;????
??? cout<<"總分鐘數(shù):"<<timeSpan.GetTotalMinutes()<<"分"<<endl;????
??? cout<<"總秒數(shù):"<<timeSpan.GetTotalSeconds()<<"秒"<<endl;???????
???
??? // 將當前時間curTime對象格式化為字符串????
??? strTime = curTime.Format(_T("%Y-%m-%d %H:%M:%S"));????
??? // 輸出格式化字符串,由于字符串使用Unicode字符,所以要使用wcout輸出????
??? wcout<<(LPCTSTR)strTime<<endl;????
???
??? return 0;????
}?
?????? 其中的注釋已經(jīng)解釋的比較清楚,相信大家都能夠理解。
?????? 4. 運行程序,效果如下:
?????? 好了,有關(guān)CTime類和CTimeSpan類的相關(guān)內(nèi)容就講到這里了,如果大家覺得還有必要了解更加詳細的知識可以參閱MSDN文檔。最后雞啄米謝謝大家一直以來的支持。
本文來源于雞啄米?http://www.jizhuomi.com/?, 原文地址:http://www.jizhuomi.com/software/230.html
轉(zhuǎn)載于:https://www.cnblogs.com/huty/p/8518658.html
總結(jié)
以上是生活随笔為你收集整理的【VS开发】CTimeSpan类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考考前冲刺第一章计算机硬件基础知识
- 下一篇: BZOJ2819 Nim(DFS序)