曜日計算アルゴリズム(C言語) うるう年に注意!!
今までに何度か曜日を算出する機会があったので、覚書を書いとこうと思いました。下に書いた関数の引数は文字通りyearは年、 monthは月、 dayは日です。
戻り値は算出された曜日に対応する数字です。0なら日曜、1なら月曜...。
ちゃんと実在する日付じゃないとダメだから、うるう年とか気をつけてね!
うるう年の判定方法をに簡単に説明します。
以下の項目をチェックすればOKです。
・西暦が4で割り切れる年は基本的にはうるう年
・西暦が100で割り切れる年は基本的にはうるう年ではないが、西暦が100でも400で割り切れる年はうるう年
uint8_t RTC_CalucuDow(uint32_t year, uint8_t month, uint8_t day) { uint8_t rc; if(month == 1 || month == 2 ){ year--; month += 12; } rc = (year + (year/4) - (year/100) + (year/400) + (((13*month)+8)/5) + day ) % 7; return (rc); }
数字でみると一年は365日で約52週間・・・。あっというまですね。
思いっきり突き進みましょう!!