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月來(lái)計(jì)算,比如2003年1月1日要看作2002年的13月1日來(lái)計(jì)算)
- d:日 [ ]代表取整,即只要整數(shù)部分。
下面以中華人民共和國(guó)成立100周年紀(jì)念日那天(2049年10月1日)來(lái)計(jì)算是星期幾,過(guò)程如下:
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周年國(guó)慶)是星期五。
再比如計(jì)算2013年3月7日,過(guò)程如下:
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++編寫(xiě)一個(gè)簡(jiǎn)單的服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何基于C++編寫(xiě)一個(gè)簡(jiǎn)單的服務(wù)器,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-03-03解析c++ 中智能指針引用計(jì)數(shù)為什么不是0原理
這篇文章主要為大家介紹了C語(yǔ)言中智能指針引用計(jì)數(shù)為什么不是0原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Qt中TableView與TreeView組件聯(lián)動(dòng)實(shí)現(xiàn)
本文主要介紹了Qt中TableView與TreeView組件聯(lián)動(dòng)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12探討編寫(xiě)int strlen(char *strDest);不允許定義變量的問(wèn)題
本篇文章是對(duì)編寫(xiě)int strlen(char *strDest);不允許定義變量的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05