為什麼一定要這樣呢?
是有這個需求還是說必需要這樣?
linux下設置時間可用函數mktime來完成
它所需要的是一個struct tm *的指針
man一下mktime就會看到struct tm結構體的組成為
structtm{
inttm_sec;/*Seconds(0-60)*/
inttm_min;/*Minutes(0-59)*/
inttm_hour;/*Hours(0-23)*/
inttm_mday;/*Dayofthemonth(1-31)*/
inttm_mon;/*Month(0-11)*/
inttm_year;/*Year-1900*/
inttm_wday;/*Dayoftheweek(0-6,Sunday=0)*/
inttm_yday;/*Dayintheyear(0-365,1Jan=0)*/
inttm_isdst;/*Daylightsavingtime*/
};
這就裡面的參數已經很詳盡也很簡單了
所以不需要你再去做其它的事情,只要填充這個結構就可以了
當然如果你非要用以上概述的方法來完成任務的其實也很簡單
只需要將以上的內容填充到這個結構體然後再調用mktime函數就可以了
下面我給個簡單的實現可以參考下,然後根據自己的實際情況再做些修改
voidsettime(unsignedchar*buf,intbuf_len)
{
structtmt;
intyear=0;
memset(&t,0,sizeof(t));
memcpy(&year,buf,2);//前兩個位元組為年份
year-=1900;//structsm結構中年份是以1900年開始計算的
t.tm_year=year;
t.tm_mon=(int)buf[2]-1;
t.tm_mday=(int)buf[3];
t.tm_hour=(int)buf[4];
t.tm_min=(int)buf[5];
t.tm_sec=(int)buf[6];
if(mktime(&t)==-1)//設置時間
perror("mktime");
}
2. 在Linux下, 用C如何設置日期
1.時間表示
在程序當中,我們經常要輸出系統當前的時間,比如我們使用date命令的輸出結果.這個時候我們可以使用下面兩個函數:
#include
time_t time(time_t *tloc);
char *ctime(const time_t *clock);
time函數返回從1970年1月1日0點以來的秒數.存儲在time_t結構之中.不過這個函數的返回值對於我們來說沒有什麼實際意義.這個時候我們使用第二個函數將秒數轉化為字元串. 這個函數的返回類型是固定的:一個可能值為.Thu Dec7 14:58:59 2000 這個字元串的長度是固定的為26.
2.時間的測量
有時候我們要計算程序執行的時間.比如我們要對演算法進行時間分析.這個時候可以使用下面這個函數. #include int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒數 */ long tv_usec; /* 微秒數 */ }; gettimeofday將時間保存在結構tv之中.tz一般我們使用NULL來代替. #include #include #include void function() { unsigned int i,j; double y; for(i=0;i<1000;i++) for(j=0;j<1000;j++) y=sin((double)i); } main() { struct timeval tpstart,tpend; float timeuse; gettimeofday(&tpstart,NULL); function(); gettimeofday(&tpend,NULL); timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec; timeuse/=1000000; printf("Used Time:%f\n",timeuse); exit(0); }
這個程序輸出函數的執行時間,我們可以使用這個來進行系統性能的測試,或者是函數演算法的效率分析.在我機器上的一個輸出結果是: Used Time:0.556070