time_t是一個大整數,表示從1970年1月1日00:00:00到當前時刻的秒數。struct tm是c/c++裡的一個標準時間結構體,定義如下。
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()為負。*/ };
下面是一個樣本。
char *get_current_time(){ //例子 static char timestr[40]; time_t t; struct tm *nowtime; time(&t); nowtime = localtime(&t); strftime(timestr,sizeof(timestr),"%Y-%m-%d %H:%M:%S",nowtime); return timestr;}
若想擷取更高精度的時間,可以使用struct timeval,這個結構體的定義如下。
struct timeval{ time_t tv_sec; suseconds_t tv_usec;};
tv_usec是一個long int資料類型,代表的是微秒(百萬分之一秒)精度。
通過使用gettimeofday來擷取系統時間,如下所示。
#include <stdio.h>#include <sys/time.h>#include <time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);int main(int argc,char * argv[]){ struct timeval tv; while(1) { gettimeofday(&tv,0); printf("time %u:%u\n",tv.tv_sec,tv.tv_usec); sleep(2); } return 0;}