标题: 单片机C语言实现蔡勒公式:自动计算某一天是星期几 [打印本页]
作者: 742624689 时间: 2019-5-29 11:41
标题: 单片机C语言实现蔡勒公式:自动计算某一天是星期几
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。
w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d-1
—— 蔡勒(Zeller)公式
符号意义如下:
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪,取值为经历过的世纪,而不是当前世纪。如2019年是21世纪,c取值20。
y:年,取后两位数。如2019年,y取值19
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
[ ]代表取整,即只要整数部分。
单片机C语言代码如下:
#include <stdio.h>
unsigned char Zeller_formula(unsigned char y,unsigned char m,unsigned char d)
{
unsigned char c,w;
c=21-1; //默认为21世纪.c表示已经经历过的世纪
if(m<3)
{
m+=12;
y-=1;
}
w=(y+y/4+c/4-2*c+(13*(m+1)/5)+d-1)%7;
if(w==0)return 7;
else return w;
}
main()
{
printf("week=%d ",Zeller_formula(19,1,1));
}
作者: ynzsc001 时间: 2020-2-22 14:20
我已经试验证实了你的这个帖子时可靠的!!!
多谢!!!!!
作者: xiexianxiao 时间: 2022-3-18 13:44
本帖最后由 xiexianxiao 于 2022-3-20 14:23 编辑
2006-04-04出错了,因为出现负值
作者: xiexianxiao 时间: 2022-3-18 13:52
本帖最后由 xiexianxiao 于 2022-3-20 17:27 编辑
只适用于2000-03-01-2099-12-31, 不能用于2000年1月2月,将范围扩展为2000-01-01到2099-12-31就好了
作者: xzhyahoo1 时间: 2022-4-17 07:05
扩展为2000-01-01到2099-12-31就好
作者: datouyuan 时间: 2022-4-18 15:01
http://www.51hei.com/bbs/dpj-219531-1.html
菜农星期算法,扩展到0~9999连。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |