
/**//*
該程序主要計算從1970年開始到開機當日經過的秒數,作為開機時間
該函數與標準C函數提供的mktime()函數的功能完全一樣
*/
#incldue <time.h>
#define MINUTE 60
#define HOUR (60 * MINUTE)
#define DAY (24 * HOUR)
#define YEAR (356 * DAY)


//下面以年為界限,定義了每個月開始時的秒數時間

static int month[12]=
{

0 ,
DAY*(32) ,
DAY*(32 + 29) ,
DAY*(32 + 29 + 31) ,
DAY*(32 + 29 + 31 + 30) ,
DAY*(32 + 29 + 31 + 30 + 31) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30 + 31) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30 + 31 + 31) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31) ,
DAY*(32 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30)

}


long kernel_mktime(struct tm * tm)

{
long res ;
int year ;
year = tm->tm_year - 70 ;
res = YEAR * year + DAY *((year + 1)/4) ; //加上在該年之前所過的閏年數木
res += month[tm->tm_mon] ; //再加上當前月份之前的月份所有的秒數
//如果不是閏年,我們就進行調整,把多加的一條去掉
if(tm->tm_mon > 1 && ((year + 2) %4))
res -= DAY ; //如果當前的月超過了2月,且本身就是閏年,那么需要減去一天
res += DAY * (tm->tm_mday - 1) ;
res += HOUR * tm->tm_hour ;
res += MINUTE * tm->tm_min ;
res += tm->tm_sec ;
return res ; //得到的結果就是從1970年開始到現在的秒數。
}


該代碼中,只有一個核心方法,就是要得到現在的時間到1970年經過的秒數。