RTC-由年月日计算星期几

2019-08-22 13:16发布

 原子的代码:
 u8 RTC_Get_Week(u16 year,u8 month,u8 day)

 u16 temp2;
 u8 yearH,yearL;
 
 yearH=year/100; yearL=year%100;
 // 如果为21世纪,年份数加100 
 if (yearH>19)yearL+=100;
 // 所过闰年数只算1900年之后的 
 temp2=yearL+yearL/4;
 temp2=temp2%7;
 temp2=temp2+day+table_week[month-1];
 if (yearL%4==0&&month<3)temp2--;
 return(temp2%7);
}
先来看一下月修正数据表 table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};假设1月1日是星期一,那么2月1日是星期四,(4-1=3),故是3,3月1日是星期四,(4-1=3),4月1日是星期日(7-1=6);这样依次类推。前提是这一年是平年。
 yearH=year/100; yearL=year%100;
 // 如果为21世纪,年份数加100 
 if (yearH>19)yearL+=100;   这几行算出本年和1900年之差
temp2=yearL+yearL/4;  year/4是闰年的年数,平年一年365天,365%7=1;temp2算出自1900年以来积累的多出来的天数;
temp2=temp2+day+table_week[month-1];//算出当天比1900年1月1日多出来的天数,并不是实际多出来的,table_week[month-1]已经除过7了
if (yearL%4==0&&month<3)temp2--;如果是润年1月,2月的话要减去一,因为yearL/4已把当年多出来的一天计算进去了,多出来的一天是在三月份以后才能加的
temp%7就是算出来的日期了。
啊~~~~~~~~原子的代码这么精简,看了老半天才懂


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
apple
1楼-- · 2019-08-23 10:14
回复【5楼】overlordtony:
---------------------------------
table_week[month-1]=5,下标搞错了你
zzartisan
2楼-- · 2019-08-23 12:47
 精彩回答 2  元偷偷看……
liusukai
3楼-- · 2019-08-23 17:59
我是这么计算星期的,先查到你的基准日期是星期几,然后读取寄存器的秒的值,然后计算过了几天,然后除以7求余数,然后计算目前是周几了,这样应该不会错吧,当然啦有局限性
aacmeme
4楼-- · 2019-08-23 21:45
回复【楼主位】apple:
请问月修正表什么意思?正确的算法不是总的天数对七求余,然后加上基准日期当天的星期数吗??
月光疾風
5楼-- · 2019-08-24 03:02
有办法可以算任意年份某天星期几的,把从公元元年开始的每一年当作平年,计算到去年一共过了多少天,再计算公元元年到去年一共有多少个闰年,每个闰年比平年多1天,算出来的闰年数+前面的总天数+今年到今天为止过的天数,用这个总和除以7求余数,因为公元元年星期一,根据余数就知道星期几了
zhang164534
6楼-- · 2019-08-24 07:17
赞一个,,嘿嘿

一周热门 更多>