Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15531005
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2007-05-17 14:47:06

秒数转换成日期和日期转换成秒数ARM源程序(ARM含详细注解gliethttp) 通常情况下PC上用time可以获得开机秒数,用localtime可以将秒数转换成年、月、日、时、分、秒但因为没有源代码,只是以库文件的形式提供,带来许多不便,所以在ARM上使用只能自己完成相应功能的时间互换,以下是作者完成的转换函数封装(这两个函数已经经过严格测试,没有发现问题,如发现问题,请与作者联系)代码如下:

  版          本  】v1.0
  函  数  名  称  】uint32 xDate2Seconds(_xtime *time)
创建人及创建时间 】gliethttp 2006-06-08 10:19
修改人及修改时间 】
  修  改  原  因  】
  功  能  描  述  】该函数计算从2006年1月1日0时0分0秒起到当前时间所经过的秒数

#define xMINUTE          (60                 )//1分的秒数
#define xHOUR            (60*xMINUTE         )//1小时的秒数
#define xDAY             (24*xHOUR           )//1天的秒数
#define xYEAR            (365*xDAY           )//1年的秒数
uint32 xDate2Seconds(_xtime *time)
{static uint32 month[12]={
/*01月*/xDAY*(0),
/*02月*/xDAY*(31),
/*03月*/xDAY*(31+28),
/*04月*/xDAY*(31+28+31),
/*05月*/xDAY*(31+28+31+30),
/*06月*/xDAY*(31+28+31+30+31),
/*07月*/xDAY*(31+28+31+30+31+30),
/*08月*/xDAY*(31+28+31+30+31+30+31),
/*09月*/xDAY*(31+28+31+30+31+30+31+31),
/*10月*/xDAY*(31+28+31+30+31+30+31+31+30),
/*11月*/xDAY*(31+28+31+30+31+30+31+31+30+31),
/*12月*/xDAY*(31+28+31+30+31+30+31+31+30+31+30)
       };
 uint32 seconds;
 uint8 year;
        year = time->year-06;                 考虑2100年千年虫问题
       seconds = xYEAR*year + xDAY*((year+1)/4);几年过去的秒数
       seconds += month[time->month-1];       上今年本月过去的秒数
       if( (time->month > 2) && (((year+2)%4)==0) )//2008年为闰年
       seconds += xDAY;                       年加1天秒数
       seconds += xDAY*(time->day-1);         上本天过去的秒数
       seconds += xHOUR*time->hour;           上本小时过去的秒数
       seconds += xMINUTE*time->minute;       上本分钟过去的秒数
       seconds += time->second;               上当前秒数
       return seconds;
}

  版          本  】v1.0
  函  数  名  称  】void xSeconds2Date(uint32 seconds,_xtime *time)
创建人及创建时间 】gliethttp 2006-06-08 10:20
修改人及修改时间 】
  修  改  原  因  】
  功  能  描  述  】秒数转换为年、月、日、时、分、秒

void xSeconds2Date(uint32 seconds,_xtime *time)
{static uint8 month[12]={
/*01月*/31,
/*02月*/28,
/*03月*/31,
/*04月*/30,
/*05月*/31,
/*06月*/30,
/*07月*/31,
/*08月*/31,
/*09月*/30,
/*10月*/31,
/*11月*/30,
/*12月*/31
       };
 uint32 days;
 uint16 leap_y_count;
    time->second      = seconds % 60;//获得秒
      seconds          /= 60;
    time->minute      =  seconds % 60;//获得分
     seconds          /= 60;
    time->hour        = seconds % 24;//获得时
     days              = seconds / 24;//获得总天数
     leap_y_count = (days + 365) / 1461;//过去了多少个闰年(4年一闰)
    if( ((days + 366) % 1461) == 0)
    {//闰年的最后1天
          time->year = 06 + (days / 366);//获得年
          time->month = 12;              整月
          time->day = 31;
        return;
    }
    days -= leap_y_count;
    time->year = 06 + (days / 365);     //获得年
     days %= 365;                       年的第几天
     days = 01 + days;                  日开始
     if( (time->year % 4) == 0 )
    {
        if(days > 60)--days;            年调整
           else
            {
               if(days == 60)
               {
                   time->month = 2;
                   time->day = 29;
                   return;
               }
            }
    }
    for(time->month = 0;month[time->month] < days;time->month++)
    {
        days -= month[time->month];
    }
    ++time->month;               整月
     time->day = days;           得日
}

阅读(4541) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~