時間函數(time.h)

 

時間結構(tm) 
struct tm {
 int tm_sec; /* Seconds */
 int tm_min; /* Minutes */
 int tm_hour; /* Hour (0 - 23) */
 int tm_mday; /* Day of month (1 - 31) */
 int tm_mon; /* Month (0 - 11) 0:元月*/
 int tm_year; /* Year (減去1900後之值) */
 int tm_wday; /* Weekday (0 - 6;Sunday is 0) */
 int tm_yday; /* Day of year (0 -365) */
 int tm_isdst; /* Nonzero if daylight saving time is in effect. */
};

【格式】: char *asctime(const struct tm *tblock);
【說明】: 將時間結構內資料轉為26個字元長之字串,與ctime類似,其26字元包括換列「\n」及字串結束符號「\0」如 :Sun Sep 16 01:03:52 1973\n\0 

【格式】: time_t mktime(struct tm *t);
【說明】: 將時間轉為日曆式,有效範為為自Jan 1 1970 00:00:00 至 Jan 19 2038 03:14:07,若轉換不成功則傳回-1

 

長整數時間(time_t)

【格式】: time_t time(time_t *timer);
【說明】: 型態time_t在01/19/2038之3:14:07就不能正常運作,需特別注意,它是一長整數long int,用於儲存時間之總秒數

【格式】: char *ctime(const time_t *time);
【說明】: 將取得之時間秒數轉為26個字元之字串,與asctime之格式相同,只是ctime之參數為一長整數time_t,而asctime之參數為時間結構

【格式】: double difftime(time_t time2, time_t time1);
【說明】: 求time1到time2間之時間差,以秒數計算,即等於time2-time1之值

【格式】: int stime(time_t *tp);
【說明】: 本函數用於設定電腦系統之日期與時間,傳回值為0

【範例】:取得目前PC系統時間

#include <iostream.h>
#include <time.h>

void main()
{
 time_t t; 
  t=time(NULL);
 cout << ctime(&t);
}

時間滴答(clock)

【格式】: clock_t clock(void);
【說明】: clock_t是一滴答(tick)數,1000個ticks為一秒,故一常數CLK_TCK之值為1000,要求兩事件間時間差需以CLK_TCK除之

【範例】:計算 2+4+6+...+10000000所需的時間

#include <iostream.h>
#include <time.h>

void main()
{
clock_t start, end;
float i,sum=0;
start = clock();
for (i=2;i<=10000000;i+=2) 
sum +=i;
end = clock();
cout<<"The time 2+4+...+10000000=" << sum << " was:"<< (end - start) <<" ticks";
cout << endl;
}

 

格式化日期時間(strftime)

【格式】: size_t strftime(char *s, size_t maxsize, const char *fmt, const struct tm *t);
【說明】: 將t結構之資料依格式fmt方式設定給字串s,字串長度最長為maxsize,若轉換錯誤則傳回0,fmt之輸出格式以ANSI方式為之。下列為ANSI內定格式指定字及說明,使用在strftime內之格式。
%%:顯示字元 %
%a:星期之縮寫
%A:星期之全名 
%b:月份之縮寫 
%B:月份之全名 
%c:日期與時間
%d:兩位數之日(01 - 31) 
%H:兩位數之24小時制 (00 - 23) 
%I :兩位數之12小時制 (01 - 12) 
%j:三位數之日數(001 - 366) 
%m:兩位數之月(1 - 12) 
%M:兩位數之分(00 - 59) 
%p:代表AM或 PM
%S:兩位數之秒 (00 - 59)
%U:兩位數之星期數 (00 - 53),以星期日為第一天 
%w:星期之表示(0 - 6),0為星期日
%W:兩位數之星期數 (00 - 53),以星期一為第一天(00 - 53) 
%x:日期 , %X:時間 , %y:兩位數之年(00 to 99)
%Y:西元年 , %Z:時間區名稱 

【格式】: char *_strtime(char *buf);
【說明】: 將現在時刻以HH:MM:SS方式輸出放在buf內,字串至少9個Bytes長

【格式】: char *_strtdate(char *buf);
【說明】: 將目前日期以MM/DD/YY方式輸出放在buf內,字串至少9個Bytes長

【範例】:取得目前PC系統日期及時間

#include <iostream.h>
#include <time.h>

void main()
{
 char sdate[9];
 char stime[9];
 _strdate(sdate);
 _strtime(stime);
 cout<<"目前日期:"<<sdate<<endl<<"現在時刻:"<<stime<<endl;
}