C語言時間函數的ctime()和gmtime()你瞭解嗎

函數原型如下:

 __CRT_INLINE char *__cdecl ctime(const time_t *_Time);
 __CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time);

ctime函數

ctime函數可以將當前時間值轉換為字符串格式返回。返回的字符串格式為:Www Mmm dd hh:mm:ss yyyy 其中,Www 表示星期幾,Mmm 是以字母表示的月份,dd 表示一月中的第幾天,hh:mm:ss 表示時間,yyyy 表示年份。

當前時間值需要通過time函數獲取,通過time函數獲取從 1970-01-01 00:00:00 開始到現在所經過的秒數。然後將這個秒數作為參數傳遞到ctime函數中,ctime函數將這個秒數轉換為當前時間格式的字符串返回。

下面通過一個簡單的例子演示一下ctime函數的用法。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char** argv)
{
	time_t now_time;

	time(&now_time);

	printf("%s ",ctime(&now_time));

	return 0;
}

首先通過time函數獲取時間計數值,然後再將這個計數值傳入ctime函數,然後使用 printf函數將 ctime函數返回的字符串打印出來。程序運行結果如下:

image.png

gmtime函數

gmtime函數是把日期和時間轉換為格林威治(GMT)時間的函數。將參數time 所指的time_t 結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。

這個理解起來有點抽象,下面直接通過代碼來演示gmtime函數的用法。

時間結構信息如下:

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     */
   int tm_yday;        /* 一年中的第幾天,范圍從 0 到 365   */
   int tm_isdst;       /* 夏令時                           */    
};

這個時間結構的定義在頭文件time.h中。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char** argv)
{
    char *wday[]= {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
	time_t timep;
	struct tm *p;
	time(&timep);
	p=gmtime(&timep); /* 獲取系統當前時間 */
	printf("%d年 %02d月 %02d日",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
	printf("%s %02d:%02d:%02d\n",wday[p->tm_wday],(p->tm_hour+8),p->tm_min,p->tm_sec);

	return 0;
}

系統運行結果如下:

image.png

在這裡要註意一點,系統返回的年數是從1900年開始計算的,所以在打印年份的時候記得要在年份的值上加上1900。

通過上面兩個函數對吧看出通過ctime函數得到的時間格式是字符串形式的,通過gmtime函數得到的時間格式是結構體形式的。在程序中更加自己的需要選擇來調用不同的函數。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!      

推薦閱讀: