年月日を数値で入力し、曜日番号(日0、月1、火2、水3、木4、金5、土6、その他7)を返すマクロ、関数を作る。
マクロ: 関数: //********************************************************* // GetDayOfWeek() // 指定された 年月日 が 何曜日 かを求める。 // 何曜日かを示す 曜日番号 を返す。 // [0 = 日, 1 = 月, 2 = 火, 3 = 水, 4 = 木, 5 = 金, 6 = 土] // // int year // 年 を 西暦 で与える。 // // int month // 月 を 1 〜 12 の範囲で指定する。 // // int day // 日 を 1 〜 31 の範囲で指定する。 // //********************************************************* int // 曜日番号 0-6 GetDayOfWeek ( int year, // 年 西暦 int month, // 月 1-12 int day // 日 1-31 ) { // 1月 と 2月 を前年の 13月 と 14月 として扱う if ( month <= 2 ) { year -= 1; month += 12; } // 曜日番号を返す return ( day + ((8 + (13 * month)) / 5) + (year + (year / 4) - (year / 100) + (year / 400)) ) % 7; }//GetDayOfWeek
もし、ライブラリの関数mktime() を使用して日付から曜日を求めるならば、次のようである。 //********************************************************* // mktime関数 を使用して日付から曜日を求める。 // 曜日番号(日0、月1、火2、水3、木4、金5、土6、その他7)を返す //********************************************************* int DayOfWeek( int Year, int Month, int Day ) { struct tm when; when.tm_year = Year - 1900; when.tm_mon = Month - 1; when.tm_mday = Day; when.tm_hour = 0; when.tm_min = 0; when.tm_sec = 0; when.tm_isdst = -1; if ( mktime( &when ) == (time_t)-1 ) { return 7; // 計算失敗 } return when.tm_wday; }//DayOfWeek 関連
・指定の年が閏年かどうか判定する |
|