找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 692|回复: 4
打印 上一主题 下一主题
收起左侧

这段单片机日历计算的C语言代码如何理解?

[复制链接]
跳转到指定楼层
楼主
ID:1020164 发表于 2022-5-24 00:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 const table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表   
char SRTC_Get_Week(u16 year,u8 month,u8 day)   //计算星期几
{  
u16 temp2;
  u8 yearH,yearL;
  
  yearH=year/100; yearL=year%100;
  if (yearH>19)yearL+=100;  
  temp2=yearL+yearL/4;
  temp2=temp2%7;
  temp2=temp2+day+table_week[month-1];
  if (yearL%4==0&&month<3)temp2--;
  if(temp2%7==0) return 7;
  return(temp2%7);
}  
这是日历计算代码。请问标红代码什么意思,请详解

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2022-5-24 06:23 | 只看该作者
1.公历闰年判定遵循的规律为:四年一闰、百年不闰、400年再闰。
2.公历闰年的精确计算方法:普通年能被四整除且不能被100整除的为闰年。
3.世纪年能被400整除的是闰年,如2000年是闰年,1900年不是闰年。对于数值很大的年份,如果这年能整除3200并且能整除172800则是闰年。
yearH,yearL;是把年份分解为>=100和<100,以方便用char型数据计算。月分大小平润。周就不必细说了吧。
回复

使用道具 举报

板凳
ID:161164 发表于 2022-5-24 07:33 来自手机 | 只看该作者
请百度"星期的计算"
回复

使用道具 举报

地板
ID:505848 发表于 2022-5-24 08:38 | 只看该作者
yearH=year/100; yearL=year%100;//取年份的后两位,用于后续区分平闰年
  if (yearH>19)yearL+=100;            //2000年之后,统一加上100
  temp2=yearL+yearL/4;                 //平年,每年剩一天,每四年一个闰年,多剩一天
  temp2=temp2%7;                        //对7取余,够7天填补一周
  temp2=temp2+day+table_week[month-1]; //多余的天+日期+月份的修正(一月说明不需要修正,二月需要修正一月31天%7后,剩下的3天)
  if (yearL%4==0&&month<3)temp2--; //补偿yearL+yearL/4中,由于正好能被4整除,多+的1天
  if(temp2%7==0) return 7;  //正好出现能被7整除时,返回星期日
  return(temp2%7);   //根据多余的天数,返回计算的星期

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:844772 发表于 2022-5-24 08:39 | 只看该作者
你查查用于计算星期的泰勒公式就明白了,大概是这个样子:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表