jake1036

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年经过的秒数。







posted on 2010-10-25 20:38 kahn 阅读(328) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理