C/C++根據(jù)年月日計(jì)算星期幾(蔡勒公式篇)
蔡勒公式 蔡勒(Zeller)公式:是一個(gè)計(jì)算星期的公式。
隨便給一個(gè)日期,就能用這個(gè)公式推算出是星期幾。
蔡勒公式如下:
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1
或者是:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符號(hào)含義如下:
- w:星期; w對(duì)7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
- c:世紀(jì)-1(前兩位數(shù))
- y:年(后兩位數(shù))
- m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計(jì)算,比如2003年1月1日要看作2002年的13月1日來計(jì)算)
- d:日 [ ]代表取整,即只要整數(shù)部分。
下面以中華人民共和國成立100周年紀(jì)念日那天(2049年10月1日)來計(jì)算是星期幾,過程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年國慶)是星期五。
再比如計(jì)算2013年3月7日,過程如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=13+[13/4]+[20/4]-2*20+[26*(3+1)/10]+7-1
=-3 (除以7余4,注意對(duì)負(fù)數(shù)的取模運(yùn)算!)
示例代碼:
int ReturnWeekDay( unsigned int iYear, unsigned int iMonth, unsigned int iDay )
{
int iWeek = 0;
unsigned int y = 0, c = 0, m = 0, d = 0;
if ( iMonth == 1 || iMonth == 2 )
{
c = ( iYear - 1 ) / 100;
y = ( iYear - 1 ) % 100;
m = iMonth + 12;
d = iDay;
}
else
{
c = iYear / 100;
y = iYear % 100;
m = iMonth;
d = iDay;
}
iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; //蔡勒公式
iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 ); //iWeek為負(fù)時(shí)取模
if ( iWeek == 0 ) //星期日不作為一周的第一天
{
iWeek = 7;
}
return iWeek;
}
總結(jié)
到此這篇關(guān)于C/C++根據(jù)年月日計(jì)算星期幾(蔡勒公式篇)的文章就介紹到這了,更多相關(guān)C/C++計(jì)算星期幾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(25.每k個(gè)一組翻轉(zhuǎn)鏈表),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C語言 動(dòng)態(tài)分配數(shù)組案例詳解
這篇文章主要介紹了C語言 動(dòng)態(tài)分配數(shù)組案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
關(guān)于C語言動(dòng)態(tài)內(nèi)存管理介紹
大家好,本篇文章主要講的是關(guān)于C語言動(dòng)態(tài)內(nèi)存管理介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
利用C++?OpenCV?實(shí)現(xiàn)從投影圖像恢復(fù)仿射特性
我們通過相機(jī)拍攝的圖片存在各種畸變,其中投影畸變使得原本平行的直線不再平行,就會(huì)產(chǎn)生照片中近大遠(yuǎn)小的效果。本文將具體介紹如何利用OPenCV實(shí)現(xiàn)從投影圖像恢復(fù)仿射特性,接下來跟著小編一起學(xué)習(xí)吧2021-11-11

