首先搞清楚兩個概念:
1、日曆時間(Calendar Time)是通過time_t資料類型來表示的,用time_t表示的時間(日曆時間)是從一個時間點(例如:1970年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是一個長整型數。
2、在標準C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下:
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、asctime(將時間和日期以字串格式表示)
char * asctime(const struct tm * timeptr):
函數說明
asctime()將參數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。此函數已經由時區轉換成當地時間,字串格式為:“Wed Jun 30 21:49:08 1993\n”
傳回值
若再調用相關的時間日期函數,此字串可能會被破壞。此函數與ctime不同處在於傳入的參數是不同的結構。
2、char *ctime(const time_t *timep);
(將時間和日期以字串格式表示):
函數說明:將參數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。
3、int gettimeofday(struct timeval * tv , struct timezone * tz ):
函數說明:gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的資訊則放到tz結構中。
timeval結構:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone結構:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鐘*/
int tz_dsttime; /*日光節約時間的狀態*/
};
4、struct tm*gmtime(const time_t*timep);
函數說明:
gmtime()將參數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。
5、struct tm *localtime(const time_t * timep);
函數說明:將參數timep
所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。此函數返回的時間日期已經轉換成當地時區。
6、mktime(將時間結構資料轉換成經過的秒數)
time_t mktime(strcut tm * timeptr);
函數說明:mktime()用來將參數timeptr所指的tm結構資料轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。
7、settimeofday(設定目前時間)
int settimeofday ( const struct timeval *tv,const struct timezone *tz);
函數說明:settimeofday()會把目前時間設成由tv所指的結構資訊,當地時區資訊則設成tz所指的結構。詳細的說明請參考gettimeofday()。注意,只有root許可權才能使用此函數修改時間。
8、time(取得目前的時間)
time_t time(time_t *t);
函數說明此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t
並非null 指標的話,此函數也會將傳回值存到t指標所指的記憶體。