C語言中兩種方式表示時間日期值time_t和struct tm類型的相互轉換


使用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);/*獲取從197011日零時到現在的秒數,保存到變量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結構數據轉換成從公元197011000 秒算起至今的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM