常見的時間函數有time( )、ctime( )、gmtime( )、localtime( )、mktime( )、asctime( )、difftime( )、gettimeofday( )、settimeofday( )
其中,gmtime和localtime函數差很少,只是localtime函數會按照時區輸出,而gmtime是用於輸出0時區的
常見的時間類型有
time_t
struct timeval(設置時間函數settimeofday( )與獲取時間函數gettimeofday( )均使用該事件類型做爲傳參。)
struct tm,
struct timespec
使用gmtime( )和localtime( )可將time_t時間類型轉換爲tm結構體;
使用mktime( )將tm結構體轉換爲time_t時間類型;
使用asctime( )將struct tm轉換爲字符串形式。ide
//各個結構體的定義 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, 11]*/ int tm_year; /*年份 - 其值爲1900年至今年數*/ int tm_wday; /*星期 - 取值區間[0, 6],0表明星期天,1表明星期1,以此類推*/ int tm_yday; /*從每一年的1月1日開始的天數-取值區間爲[0, 365],0表明1月1日*/ int tm_isdst; /*夏令時標識符,使用夏令時,tm_isdst爲正,不使用夏令時,tm_isdst爲0,不瞭解狀況時,tm_isdst爲負*/ }; Struct tmieval{ time_t tv_sec; /*秒s*/ suseconds_t tv_usec; /*微秒us*/ }; struct timespec{ time_t tv_sec; /*秒s*/ long tv_nsec; /*納秒ns*/ };
如今咱們來看一下使用這些函數的程序
首先是time()函數的使用函數
[root@bogon time]# cat time.c #include<time.h> #include<unistd.h> #include<stdio.h> int main() { time_t seconds,sec,time1,time2; struct tm *mytm,gettm; seconds=time(NULL); mytm=localtime(&seconds);//localtime的參數爲time_t類型 sec=mktime(mytm);//mktime參數爲結構體tm類型 time1=time(NULL);//time參數類型爲time_t類型,或者爲NULL也能夠 sleep(1);//由於要difftime,因此讓time1和time2不一樣 time2=time(NULL); printf("use time: %ld\n",seconds); printf("use ctime: %s",ctime(&seconds));//ctime的類型也爲time_t類型 printf("use gmtime: %d-%d-%d\n",(mytm->tm_year)+1900,(mytm->tm_mon)+1,mytm->tm_mday); printf("use mktime :%ld\n",sec); printf("use asctime: %s",asctime(mytm));//跟ctime功能差很少,只是它的參數是結構體tm類型的 printf("use difftime: %lf\n",difftime(time1,time2));//計算time1-time2 return 0; } [root@bogon time]# gcc time.c [root@bogon time]# ./a.out use time: 1495946001 use ctime: Sat May 27 21:33:21 2017 use gmtime: 2017-5-27 use mktime :1495946001 use asctime: Sat May 27 21:33:21 2017 use difftime: -1.000000 [root@bogon time]#