
/**//*
該程序主要計(jì)算從1970年開(kāi)始到開(kāi)機(jī)當(dāng)日經(jīng)過(guò)的秒數(shù),作為開(kāi)機(jī)時(shí)間
該函數(shù)與標(biāo)準(zhǔn)C函數(shù)提供的mktime()函數(shù)的功能完全一樣
*/
#incldue <time.h>
#define MINUTE 60
#define HOUR (60 * MINUTE)
#define DAY (24 * HOUR)
#define YEAR (356 * DAY)


//下面以年為界限,定義了每個(gè)月開(kāi)始時(shí)的秒數(shù)時(shí)間

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) ; //加上在該年之前所過(guò)的閏年數(shù)木
res += month[tm->tm_mon] ; //再加上當(dāng)前月份之前的月份所有的秒數(shù)
//如果不是閏年,我們就進(jìn)行調(diào)整,把多加的一條去掉
if(tm->tm_mon > 1 && ((year + 2) %4))
res -= DAY ; //如果當(dāng)前的月超過(guò)了2月,且本身就是閏年,那么需要減去一天
res += DAY * (tm->tm_mday - 1) ;
res += HOUR * tm->tm_hour ;
res += MINUTE * tm->tm_min ;
res += tm->tm_sec ;
return res ; //得到的結(jié)果就是從1970年開(kāi)始到現(xiàn)在的秒數(shù)。
}


該代碼中,只有一個(gè)核心方法,就是要得到現(xiàn)在的時(shí)間到1970年經(jīng)過(guò)的秒數(shù)。