はじめに
C言語で平日と土日を判定するには、tm_wdayで曜日を表す数値を取り出し、土曜と日曜を平日以外と判定します。
このプログラムは、祝祭日には対応していません。
土日判定プログラム
t.tm_wdayを判定して、日曜(0)と土曜(6)はtrueを返します。
bool isHoliday(int year, int month, int day) { int dow = 0; // day of week struct tm t; t.tm_year = year - 1900; // 年 t.tm_mon = month - 1; // 月 t.tm_mday = day; // 日 t.tm_hour = 0; // 時 t.tm_min = 0; // 分 t.tm_sec = 0; // 秒 t.tm_isdst = -1; // 夏時間(OFF) mktime(&t); dow = t.tm_wday; // 日曜(0)と土曜(6)は休日 if (dow == 0 || dow == 6) { return true; } else { return false; } }
サンプルプログラム
#include "stdafx.h" #include <time.h> #pragma warning(disable : 4996) int getDayOfWeek(int year, int month, int day); bool isHoliday(int year, int month, int day); int _tmain(int argc, _TCHAR* argv[]) { int w; static char *ws[] = {"日", "月", "火", "水", "木", "金", "土"}; time_t timer; struct tm *local; // 現在時刻を取得 timer = time(NULL); local = localtime(&timer); printf("%4d/", local->tm_year + 1900); printf("%2d/", local->tm_mon + 1); printf("%2d ", local->tm_mday); w = getDayOfWeek(local->tm_year + 1900, local->tm_mon + 1, local->tm_mday); printf(" %s曜日です。\n", ws[w]); bool ret = isHoliday(local->tm_year + 1900, local->tm_mon + 1, local->tm_mday); if (ret) { printf("休日\n"); } else { printf("平日\n"); } return (0); } int getDayOfWeek(int year, int month, int day) { struct tm t; t.tm_year = year - 1900; // 年 t.tm_mon = month - 1; // 月 t.tm_mday = day; // 日 t.tm_hour = 0; // 時 t.tm_min = 0; // 分 t.tm_sec = 0; // 秒 t.tm_isdst = -1; // 夏時間(OFF) mktime(&t); return t.tm_wday; } bool isHoliday(int year, int month, int day) { int dow = 0; // day of week struct tm t; t.tm_year = year - 1900; // 年 t.tm_mon = month - 1; // 月 t.tm_mday = day; // 日 t.tm_hour = 0; // 時 t.tm_min = 0; // 分 t.tm_sec = 0; // 秒 t.tm_isdst = -1; // 夏時間(OFF) mktime(&t); dow = t.tm_wday; // 日曜(0)と土曜(6)は休日 if (dow == 0 || dow == 6) { return true; } else { return false; } }