struct tm->time() localtime() gmtime()
struct tm { int tm_sec; /*代表目前秒數,正常范圍為0-59,但允許至61秒 */ int tm_min; /*代表目前分數,范圍0-59*/ int tm_hour; /*從午夜算起的時數,范圍為0-23*/ int tm_mday; /*目前月份的日數,范圍01-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; /*日光節約時間的旗標*/ };
time()
編程語言C語言中的函數。 頭文件:time.h 函數原型:time_t time(time_t * timer) 功能: 獲取當前的系統時間,返回的結果是一個time_t類型,其實就是一個大整數,其值表示從CUT(Coordinated Universal Time)時間1970年1月1日00:00:00(稱為UNIX系統的Epoch時間)到當前時刻的秒數。然後調用localtime將time_t所表示的CUT時間轉換為本地時間(我們是+8區,比CUT多8個小時)並轉成struct tm類型,該類型的各數據成員分別表示年月日時分秒。 補充說明:time函數的原型也可以理解為 long time(long *tloc),即返回一個long型整數。因為在time.h這個頭文件中time_t實際上就是:#ifndef _TIME_T_DEFINED typedef long time_t; /* time value */ #define _TIME_T_DEFINED /* avoid multiple defines of time_t */ #endif即long。
#include <stdio.h> #include <stddef.h> #include <time.h> int main(void) { time_t timer;//time_t就是long int 類型 struct tm *tblock; timer = time(NULL);//這一句也可以改成time(&timer); tblock = localtime(&timer); printf("Local time is: %s\n",asctime(tblock)); return 0; }localtime() 功 能: 把從1970-1-1零點零分到當前時間系統所偏移的秒數時間轉換為日歷時間 。 說明:此函數獲得的tm結構體的時間,是已經進行過時區轉化為本地時間。 用 法: struct tm *localtime(const time_t *clock); 返回值:返回指向tm 結構體的指針.tm結構體是time.h中定義的用於分別存儲時間的各個量(年月日等)的結構體. 需要注意的是年份加上1900,月份加上1。
#include<time.h> #include<stdio.h> int main() { struct tm *t; time_t tt; time(&tt); t=localtime(&tt); printf("%4d年%02d月%02d日 %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); return 0; }
gmtime()
頭文件:time.h 原型:struct tm *gmtime(long *clock); 功能:把日期和時間轉換為格林威治(GMT)時間的函數。將參數timep 所指的time_t 結構中的信息轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。 此函數返回的時間日期未經時區轉換,而是UTC時間。 返回值 返回結構tm代表目前UTC 時間#include "stdio.h" #include "time.h" #include "stdlib.h" int main(void) { time_t t; struct tm *gmt, *area; tzset(); /* tzset()*/ t = time(NULL); area = localtime(&t); printf("Local time is: %s", asctime(area)); gmt = gmtime(&t); printf("GMT is: %s", asctime(gmt)); return 0; }