vc/c++時間函數
一、MFC類
MFC提供了兩個日期和
時間類CTime和CTimeSpan,分別代表相對
時間和絕對
時間。CTime是基于格林威治平均
時間(GMT)的,本地的
時間由環境變數TZ決定。CTimeSpan代表了
時間間隔。
CTime類由下列成員函數:
CTime()
建立一個CTime對象。
GetCurrentTime()
由當前時間建立一個CTime對象。
GetTime()
由CTime對象返回一個time_t變數。
GetYear()
擷取CTime對象代表的年。
GetMonth()
擷取CTime對象代表的月。
GetDay() 擷取CTime對象代表的日期。
GetHour() 擷取CTime對象代表的小時。
GetMinute()擷取CTime對象代表的分。
GetSecond() 擷取CTime對象代表的秒。
GetDayOfWeek() 擷取CTime對象代表的周日,1代表周日,2代表周-等等。
Format() 將字串轉換成一個基於本地時區的格式字串。
FormatGmt() 將字串轉換成一個基於UTC(世界時)的格式字串。
operator = 賦予新的時間。
operator + 增加CTime和CTimeSpan對象。
operator – 減小CTime和CTimeSpan對象。
operator += CTime對象加一個CTimeSpan對象。
operator -= CTime對象減一個CTimeSpan對象。
operator == 比較兩個絕對時間是否相等。
operator != 比較兩個絕對時間是否不相等。
operator < 比較兩個絕對時間,是否前一個大於後一個。
operator > 比較兩個絕對時間,是否前一個小於後一個。
operator >= 比較兩個絕對時間,是否前一個大於等於後一個。
operator <= 比較兩個絕對時間,是否前一個小於等於後一個 二、總結 首先看幾個函數的原型的聲明(在time.h中):
clock_t clock( void ) clock_t是用來儲存時間的資料類型,是long型
double difftime(time_t time1, time_t time0); 取時間間隔的函數
time_t time(time_t * timer); 日曆時間函數
char * asctime(const struct tm * timeptr); 將tm 類的時間結構轉化為 固定時間格式
char * ctime(const time_t *timer); 將日曆時間轉化為 固定時間格式
time_t mktime(struct tm * timeptr); 以年、月、日、時、分、秒等分量儲存的時間結構
struct tm * gmtime(const time_t *timer); 將日曆時間轉化為格林尼治時間
struct tm * localtime(const time_t * timer); 將日曆時間轉化為當地時間
tm 的定義:
struct tm {
int tm_sec; /* 秒 – 取值區間為[0,59] */
int tm_min; /* 分 - 取值區間為[0,59] */
int tm_hour; /* 時 - 取值區間為[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */
int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
int tm_year; /* 年份,其值等於實際年份減去1900 */
int tm_wday; /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推
*/
int tm_yday; /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,
1代表1月2日,以此類推 */
int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候
,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/}
1.擷取間隔時間
1. clock_t start, finish;
long i = 10000000;
double duration;
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
cout<<duration;
輸出的是: i從10000000減到零用的時間,精確到毫秒
2.
double pause1;
time_t start,end;
start = time(NULL);
system("pause");
end = time(NULL);
pause1 =difftime(end,start);
cout<<pause1;
輸出的是: 你停頓(pause)的時間,精確到秒
2.獲得日曆時間
time_t lt;
lt =time(NULL);//(還不清楚帶參的和不帶參的區別)
cout<<lt;
輸出的是: 從1970年1月1日0時0分0秒到此時的秒數
3.獲得日期和時間
1. 將日曆時間轉化為本地時間(格林尼治時間)
struct tm *local
time_t t;
t=time(NULL);
local=localtime(&t);
//local=gmtime(&t);
cout<<local->tm_hour;
2. 以固定的時間格式獲得日期和時間:看清這兩個函數的參和傳回值的類型
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
1.將日曆時間直接轉換為 固定的時間格式的日期和時間
char * jieguo;
time_t lt;
lt =time(NULL);
jieguo =ctime(<);
cout<< jieguo;
2.將日曆時間經過localtime()和gmtime()轉換後在轉換為固定的時間格式的日期和時間
struct tm *local;
char * jieguo;
time_t t;
t =time(NULL);
local=localtime(&t);
//local=gmtime(&t);
jieguo=asctime(local);
cout<< jieguo;
4.分解時間轉化為日曆時間
這裡說的分解時間就是以年、月、日、時、分、秒等分量儲存的時間結構,在C/C++中是tm結構。我們可
以使用mktime()函數將用tm結構表示的時間轉化為日曆時間。其函數原型如下:
time_t mktime(struct tm * timeptr);
其傳回值就是轉化後的日曆時間。這樣我們就可以先制定一個分解時間,然後對這個時間進行操作了,
下面的例子可以計算出1997年7月1日是星期幾:
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}
運行結果:
Tue Jul 01 00:00:01 1997
現在注意了,有了mktime()函數,是不是我們可以操作現在之前的任何時間呢?你可以通過這種辦法算
出1945年8月15號是星期幾嗎?答案是否定的。因為這個時間在1970年1月1日之前,所以在大多數編譯器
中,這樣的程式雖然可以編譯通過,但運行時會異常終止。
5.還知道了一個system()函數,是執行DOS命令的,system("某DOS命令");標頭檔是stdlib.h?windows.h