linux内核时间处理模块

linux内核时间处理模块

/**/ /*
  该程序主要计算从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年经过的秒数。







你可能感兴趣的:(linux内核时间处理模块)