使用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