| /** * @brief        秒 <--> 日期时刻
 */
 #ifdef        EN_TIME_SECS
 #define        YEAR_FROM        2000
 #define        YEAR_DIFF        2100
 static        const uint DaysBeforeM[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
 uint DateTimeToSeconds (const uint *dt)
 {
 uint yy, mm, dd;
 
 yy = dt[0] - YEAR_FROM;
 dd = yy * 365 + ((yy + 3) >> 2);
 if(yy > (YEAR_DIFF - YEAR_FROM)) dd--;
 
 mm = dt[1];
 dd += DaysBeforeM[mm - 1];
 if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))) dd++;
 
 dd += dt[2] - 1;
 
 return dd*86400 + dt[3]*3600 + dt[4]*60 + dt[5];
 }
 void SecondsToDateTime (uint secs, uint *dt)
 {
 uint yy, mm, dd, tt;
 
 dt[5] = secs % 60;
 secs /= 60;
 dt[4] = secs % 60;
 secs /= 60;
 dt[3] = secs % 24;
 secs /= 24;
 
 yy = secs / 365;
 dd = secs % 365;
 tt = (yy + 3) >> 2;
 if(yy > (YEAR_DIFF - YEAR_FROM)) tt--;
 if(dd < tt){
 yy--;
 if(((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))) dd++;
 dd += 365;
 }
 dd -= tt;
 
 mm = 0;
 while((mm < 12) && (dd >= DaysBeforeM[mm])) mm++;
 dd -= DaysBeforeM[mm-1];
 
 if((mm > 2) && ((yy & 3) == 0) && (yy != (YEAR_DIFF - YEAR_FROM))){
 if(dd == 0){
 mm--;
 dd = (mm == 2) ? 29 : DaysBeforeM[mm] - DaysBeforeM[mm-1];
 }
 dd--;
 }
 dd++;
 
 dt[0] = yy + YEAR_FROM;
 dt[1] = mm;
 dt[2] = dd;
 }
 #endif
 |