標籤:time c語言 字元數組 閱讀 main 原型 日期時間 擷取 oca
使用gmtime函數或localtime函數將time_t類型的時間日期轉換為structtm類型:
使用time函數返回的是一個long值,該值對使用者的意義不大,一般不能根據其值確定具體的年、月、日等資料。gmtime函數可以方便的對time_t類型資料進行轉換,將其轉換為tm結構的資料方便資料閱讀。
gmtime函數的原型如下:
struct tm *gmtime(time_t*timep);
localtime函數的原型如下:
struct tm *localtime(time_t*timep);
將參數timep所指的time_t類型資訊轉換成實際所使用的時間日期表示方法,將結果返回到結構tm結構類型的變數。
gmtime函數用來存放實際日期時間的結構變數是靜態分配的,每次調用gmtime函數都將重寫該結構變數。如果希望儲存結構變數中的內容,必須將其複製到tm結構的另一個變數中。
gmtime函數與localtime函數的區別:
gmtime函數返回的時間日期未經時區轉換,是UTC時間(又稱為世界時間,即格林尼治時間)。
localtime函數返回當前時區的時間,
轉換日期時間表示形式time_t類型轉換為structtm類型樣本:
#include
#include
int main()
{
char*wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};/*指標字元數組*/
time_t t;
struct tm *p;
t=time(NULL);/*擷取從1970年1月1日零時到現在的秒數,儲存到變數t中*/
p=gmtime(&t); /*變數t的值轉換為實際日期時間的表示格式*/
printf("%d年%02d月%02d日",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);
printf(" %s ", wday[p->tm_wday]);
printf("%02d:%02d:%02d\n", p->tm_hour,p->tm_min, p->tm_sec);
return 0;
}
注意:p=gmtime(&t);此行若改為p=localtime(&t);則返回當前時區的時間
② 使用mktime函數將structtm類型的時間日期轉換為time_t類型:
表標頭檔
#include
定義函數
time_t mktime(strcut tm *timeptr);
函數說明
mktime()用來將參數timeptr所指的tm結構資料轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。
傳回值
返回經過的秒數。
日期轉換為秒數樣本:
#include
#include
int main()
{
time_t t;
struct tm stm;
printf("請輸入日期時間值(按yyyy/mm/dd hh:mm:ss格式):");
scanf("%d/%d/%d%d:%d:%d",&stm.tm_year,&stm.tm_mon,&stm.tm_mday,
&stm.tm_hour,&stm.tm_min,&stm.tm_sec);
stm.tm_year-=1900; /*年份值減去1900,得到tm結構中儲存的年份序數*/
stm.tm_mon-=1; /*月份值減去1,得到tm結構中儲存的月份序數*/
t=mktime(&stm); /* 若使用者輸入的日期時間有誤,則函數傳回值為-1*/
if(-1==t)
{
printf("輸入的日期時間格式出錯!\n");
exit(1);
}
printf("1970/01/01 00:00:00~%d/%02d/%02d%02d:%02d:%02d共%d秒\n",
stm.tm_year+1900,stm.tm_mon,stm.tm_mday,
stm.tm_hour,stm.tm_min,stm.tm_sec,t);
return 0;
}
轉:http://www.360doc.com/content/11/0720/14/1317564_134702417.shtml
C語言中兩種方式表示時間日期值time_t和struct tm類型的相互轉換