閏年を考慮した日時計算プログラムを何度かに分けて載せる予定です。
(中身は、むかしANCI-Cで書いたコードをC++クラスで囲っただけです)
今回は共通部。
//—————————————————————————–
// 1.関数名 : ChkLeapYear
// 2.機能 : 閏年を判定する
// 3.引数 : iYear 年
// 4.戻り値 : 閏年=1
// : 閏年以外=0
//—————————————————————————–
int CAdjustDate::ChkLeapYear(int iYear)
{
if (iYear % 100) {
// 100で割り切れない
if (iYear % 4) {
// 4で割り切れない
return 0;
}
else {
// 4で割り切れる
return 1;
}
}
else {
// 100で割り切れる
if (iYear % 400) {
// 400で割り切れない
return 0;
}
else {
// 400で割り切れる
return 1;
}
}
}
//—————————————————————————–
// 1.関数名 : GetMonthEndDay
// 2.機能 : 指定年月の末日取得
// 3.引数 : iYear 年
// : iMonth 月
// 4.戻り値 : 指定年月の末日
//—————————————————————————–
int CAdjustDate::GetMonthEndDay(int iYear, int iMonth)
{
static int m_iMonthEndDay[12] =
// 01 02 03 04 05 06 07 08 09 10 11 12
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (iMonth == 2) {
return (m_iMonthEndDay[iMonth – 1] + ChkLeapYear(iYear));
}
else {
return (m_iMonthEndDay[iMonth – 1]);
}
}