找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3905|回復(fù): 5
收起左側(cè)

單片機(jī)C語言實(shí)現(xiàn)蔡勒公式:自動(dòng)計(jì)算某一天是星期幾

[復(fù)制鏈接]
ID:504258 發(fā)表于 2019-5-29 11:41 | 顯示全部樓層 |閱讀模式
蔡勒(Zeller)公式,是一個(gè)計(jì)算星期的公式,隨便給一個(gè)日期,就能用這個(gè)公式推算出是星期幾。

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

—— 蔡勒(Zeller)公式

符號(hào)意義如下:
w:星期; w對(duì)7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世紀(jì),取值為經(jīng)歷過的世紀(jì),而不是當(dāng)前世紀(jì)。如2019年是21世紀(jì),c取值20
y:年,取后兩位數(shù)。如2019年,y取值19
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的12月要看作上一年的13、14月來計(jì)算,比如200311日要看作2002年的131日來計(jì)算)
d:日
[ ]代表取整,即只要整數(shù)部分。

單片機(jī)C語言代碼如下:
#include <stdio.h>

unsigned char Zeller_formula(unsigned char y,unsigned char m,unsigned char d)
{
        unsigned char c,w;
        c=21-1;                //默認(rèn)為21世紀(jì).c表示已經(jīng)經(jīng)歷過的世紀(jì)
        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));
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:408809 發(fā)表于 2020-2-22 14:20 | 顯示全部樓層
我已經(jīng)試驗(yàn)證實(shí)了你的這個(gè)帖子時(shí)可靠的!。
多謝!。。!
回復(fù)

使用道具 舉報(bào)

ID:120219 發(fā)表于 2022-3-18 13:44 | 顯示全部樓層
本帖最后由 xiexianxiao 于 2022-3-20 14:23 編輯

2006-04-04出錯(cuò)了,因?yàn)槌霈F(xiàn)負(fù)值
回復(fù)

使用道具 舉報(bào)

ID:120219 發(fā)表于 2022-3-18 13:52 | 顯示全部樓層
本帖最后由 xiexianxiao 于 2022-3-20 17:27 編輯

只適用于2000-03-01-2099-12-31, 不能用于2000年1月2月,將范圍擴(kuò)展為2000-01-01到2099-12-31就好了
回復(fù)

使用道具 舉報(bào)

ID:907700 發(fā)表于 2022-4-17 07:05 | 顯示全部樓層
擴(kuò)展為2000-01-01到2099-12-31就好
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2022-4-18 15:01 | 顯示全部樓層
xzhyahoo1 發(fā)表于 2022-4-17 07:05
擴(kuò)展為2000-01-01到2099-12-31就好

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

菜農(nóng)星期算法,擴(kuò)展到0~9999連。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表