最近翻到《C專家編程》前言看到time_t函數,竟然一時之間全無概念,只是約莫知道是個有關時間的函數,這對已經學了C/C++的博主來說,簡直是個嘲諷,本機測試了一下,大概是下面這個樣子:
#include經過其他測試,我們可以總結:#include #include #include #include using namespace std; /*常用的時間函數: */ ///將結構中的信息轉換為真實世界的時間,以字符串的形式顯示 char *asctime(const struct tm* timeptr); ///將timep轉換為真實世界的時間,以字符串的形式顯示,和asctime傳入參數不一樣 char *ctime(const time_t *timep); ///返回兩個時間差的秒數 double difftime(time_t time1, time_t time2); ///返回當前距離1970年的秒數和微妙數,後面的tz是時區,一般不用 int get_time_of_day(struct timeval *tv,struct timezone *tz); ///將time_t表示的時間轉換為沒有經過時區轉換的UTC時間,是一個struct tm結構指針 struct tm* gmtime(const time_t *timep); ///和gmtime類似,但是它是經過時區轉換的時間。 struct tm* localtime(const time_t *timpe); ///將struct tm 結構的時間轉換為從1970年至今的秒數 time_t mktime(struct tm* timeptr); ///取得從1970年1月1日至今的秒數。 time_t time(time_t *t); int main() { /*運行程序用系統命令date顯示本機時間為: Thu Nov 26 12:53:13 2015*/ time_t biggest= 0x7fffffff; /// time_t所能表示的最大值 printf(biggest= %s , ctime(&biggest)); printf(biggest= %s , asctime(gmtime(&biggest))); /* 輸出: biggest= Tue Jan 19 11:14:07 2038 biggest= Tue Jan 19 03:14:07 2038 我們發現整整差了8個小時,這是因為ctime()函數把參數轉換為當地時間,跟世界統一時間UTC(格林尼治時間)並不一樣 取決於所在的時區,參照上面函數說明可以知道: gmtime()函數是將time_t表示的時間轉換為沒有經過時區轉換的UTC時間,是一個struct tm結構指針 */ /*可以測試一下下面兩個例子*/ time_t timep; time(&timep); ///獲取time_t類型的當前時間 printf(%s , asctime( gmtime(&timep))); /// 輸出: Thu Nov 26 04:44:40 2015 ///沒有經過時區轉換的UTC時間 time_t timep; time(&timep); printf(%s , ctime(&timep)); ///輸出: Thu Nov 26 12:53:13 2015 ///經過時區轉換的UTC時間 return 0; }