找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机C语言实现蔡勒公式:自动计算某一天是星期几

[复制链接]
跳转到指定楼层
楼主
ID:504258 发表于 2019-5-29 11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。

w=y+[y/4]+[c/4]-2c+[13(m+1)/5]+d-1

—— 蔡勒(Zeller)公式

符号意义如下:
w:星期; w7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪,取值为经历过的世纪,而不是当前世纪。如2019年是21世纪,c取值20
y:年,取后两位数。如2019年,y取值19
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的12月要看作上一年的1314月来计算,比如200311日要看作2002年的131日来计算)
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));
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:408809 发表于 2020-2-22 14:20 | 只看该作者
我已经试验证实了你的这个帖子时可靠的!!!
多谢!!!!!
回复

使用道具 举报

板凳
ID:120219 发表于 2022-3-18 13:44 | 只看该作者
本帖最后由 xiexianxiao 于 2022-3-20 14:23 编辑

2006-04-04出错了,因为出现负值
回复

使用道具 举报

地板
ID:120219 发表于 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就好了
回复

使用道具 举报

5#
ID:907700 发表于 2022-4-17 07:05 | 只看该作者
扩展为2000-01-01到2099-12-31就好
回复

使用道具 举报

6#
ID:887371 发表于 2022-4-18 15:01 | 只看该作者
xzhyahoo1 发表于 2022-4-17 07:05
扩展为2000-01-01到2099-12-31就好

http://www.51hei.com/bbs/dpj-219531-1.html

菜农星期算法,扩展到0~9999连。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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