C語言時間函式

loophome發表於2015-10-31

在呼叫系統時間處理時間問題時,需要使用時間函式,使用前需要引入標頭檔案time.h。

1.time函式

time_t time(time_t *t);

time函式會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。引數t是一個指標,如果不是一個空指標,函式也會將返回值存到t指標所指的記憶體單元中。time_t是“time.h”標頭檔案中定義的一個資料型別,表示一個時間的秒數,相當於一個長整型變數。如果t是一個空指標,函式會返回一個time_t型長整型數。

DEMO:

time_t lt;
time(&lt);
printf("Now time:%ld\n",lt);

2.gmtime函式

struct tm *gmtime(time_t *timep);

取當前時間函式gmtime:函式gmtime的作用是將time_t表示秒數的時間轉換為人可以理解的時間。這個函式的使用方法如下所示。

從上面的使用方法可知,函式的引數是一個表示當前時間秒數的指標。返回值是一個tm型別的結構體指標。tm結構體是“time.h”標頭檔案中定義的,定義方法和成員如下所示。

struct tm
{
   int tm_sec;
   int tm_min;
   int tm_hour;
   int tm_mday;
   int tm_mon;
   int tm_year;
   int tm_wday;
   int tm_yday;
   int tm_isdst;
};

這些成員表示的含義和範圍如下所示。
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。
int tm_yday:從本年1月1日算起至今的天數,範圍為0-365。
int tm_isdst:是不是使用了夏令時間。如果為1表示使用了夏令時,為0則表示沒有使用夏令時。

DEMO:

struct tm *p_tm;
time_t lt;
time(<);
printf("Now time:%ld\n",lt);
p_tm=gmtime(<);
printf("%d年%d月%d日 %d:%d:%d\n",p_tm->tm_year+1900,p_tm->tm_mon+1,p_tm->tm_mday,p_tm->tm_hour,p_tm->tm_min,p_tm->tm_sec);


3.ctime函式

char *ctime(time_t *timep);

字串格式時間函式ctime:函式ctime的作用是將一個時間返回成一個可以識別的字串格式。這個函式的使用方法如下所示。

4.asctime函式

char * asctime(struct tm * timeptr);

字串格式時間函式asctime:函式asctime的作用是將一個tm格式的時間轉換為一個字串格式。這個函式的使用方法如下所示。


5.localtime函式

struct tm *localtime(time_t * timep);

取得當地時間函式localtime:函式localtime的作用是返回tm格式的當地時間。與gmtime函式不同的是,gmtime函式返回的是一個UTC時間。localtime時間的使用方法如下所示。

6.mktime函式

time_t mktime(tm * timeptr);

將時間轉換成秒數函式mktime:函式mktime的作用是將一個tm結構型別的時間轉換成秒數時間。該函式的使用方法如下所示。

DEMO:

	struct tm *p_tm;
	time_t lt;
	time(<);
	printf("Now time:%ld\n",lt);
	p_tm=gmtime(<);
	printf("%d年%d月%d日 %d:%d:%d\n",p_tm->tm_year+1900,p_tm->tm_mon+1,p_tm->tm_mday,p_tm->tm_hour,p_tm->tm_min,p_tm->tm_sec);
	printf(ctime(<));
	printf(asctime(p_tm));
	p_tm->tm_year=2014-1900;   //賦值年份
	printf("Pass time:%ld\n",mktime(p_tm));

7.gettimeofday函式

需要引入標頭檔案sys/time.h

int gettimeofday ( struct timeval * tv , struct timezone * tz )

取得目前的時間函式gettimeofday:前面所講到的時間函式只能把時間精確到秒。如果對時間的處理精度為微秒級,需要使用函式gettimeofday。一微秒等於百萬分之一秒。

這個函式的引數是兩個結構體指標。這兩個結構體的定義如下所示。

struct timeval
{
  long tv_sec;
           long tv_usec;
};
結構體成員的含義如下所示。
tv_sec:當前時間的秒數。
tv_usec:當前時間的微秒數。

struct timezone{
int tz_minuteswest;
int tz_dsttime;
};
結構體成員的含義如下所示。
tz_minuteswest:與UTC時間相差的分鐘數。
tz_dsttime:與夏令時間相差的分鐘數。
函式gettimeofday會把當前時間的這些引數返回到這兩個結構體指標上。如果處理成功,則返回真值1,否則返回0。這個函式的使用例項如下所示。

DEMO:

	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv,&tz);
	printf("Second:%ld,Usecond:%ld\n",tv.tv_sec,tv.tv_usec);

8.settimeofday函式

int settimeofday (struct timeval *tv, struct timezone *tz);

設定當前時間函式settimeofday:函式settimeofday的作用是設定當前的系統時間。只有root使用者登陸以後才有許可權進行這個操作。

相關文章