読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


C言語で平日と土日を判定する

はじめに

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;
  }
}