这段关于stm32万年历程序代码是什么意思

#if 1
{
Num4Y = TimeVar/SecsPerFourYear;
OffSec = TimeVar%SecsPerFourYear;
i=1;
while(OffSec > Year_Secs_Accu[i++])
Off4Y++;

/* Numer of Complete Year */
NumY = Num4Y*4 + Off4Y;
/* 2000,2001,...~2000+NumY-1 complete year before, so this year is 2000+NumY*/
TY = 2000+NumY;

OffSec = OffSec - Year_Secs_Accu[i-2];

/* Month (TBD with OffSec)*/
i=0;
if(TY%4)
{// common year
while(OffSec > Month_Secs_Accu_C[i++]);
TM = i-1;
OffSec = OffSec - Month_Secs_Accu_C[i-2];
}
else
{// leap year
while(OffSec > Month_Secs_Accu_L[i++]);
TM = i-1;
OffSec = OffSec - Month_Secs_Accu_L[i-2];
}

/* Date (TBD with OffSec) */
NumDay = OffSec/SecsPerDay;
OffSec = OffSec%SecsPerDay;
TD = NumDay+1;
/* Compute hours */
THH = OffSec/3600;
/* Compute minutes */
TMM = (OffSec % 3600)/60;
/* Compute seconds */
TSS = (OffSec % 3600)% 60;
}
#endif
printf("Date: %0.4d-%0.2d-%0.2d Time: %0.2d:%0.2d:%0.2d\r",TY, TM, TD,THH, TMM, TSS);
把每句含义写出来就行。。尤其是计算那几句 ?怎么算的
前面是这样的

TimeVar 分析此参数是以2000年为基准的,到当前时间的秒数值。未找到依据。
Num4Y是计算当前时间包含多少个4年
Off4Y是说明当前时间对4年取余后的数值
TY当前年份

OffSec = OffSec - Year_Secs_Accu[i-2]; 此时OffSec去除当前年份剩余的秒数值,用于确定月份。

if(TY%4)判断是不是闰年
TM为当前月份值
OffSec = OffSec - Month_Secs_Accu_L[i-2]; 此时OffSec去除当前月份剩余的秒数值,用于确定日期。
NumDay OffSec数值之前有都少天
OffSec = OffSec%SecsPerDay;此时OffSec去除当前日期剩余的秒数值,用于确定当前时、分、秒。
TD当前日期数值
THH 时
TMM 分
TSS 秒
温馨提示:答案为网友推荐,仅供参考
相似回答