【C言語】年月日から曜日を求める方法を解説

ツェラーの公式という計算方法を使って、任意の日付の曜日を求めることができます。

この記事では、C言語を使って与えられた年月日から曜日を求める方法を解説します。

目次から探す

曜日を求めるための基本的な考え方

曜日の計算方法

曜日を求めるためには、与えられた年月日から曜日を計算する必要があります。

一般的には、ツェラーの公式という方法が使われます。

ツェラーの公式は、1582年10月15日以降の日付に対して有効な計算方法です。

ツェラーの公式

ツェラーの公式は、与えられた年月日から曜日を求めるための数式です。

以下がツェラーの公式の数式です。

h = (q + (13 * (m + 1) / 5) + K + (K / 4) + (J / 4) - (2 * J)) % 7
  • h: 曜日を表す数値(0が土曜日、1が日曜日、2が月曜日、…、6が金曜日)
  • q: 日付(1から31までの値)
  • m: 月(3が3月、4が4月、…、12が12月、1が1月、2が2月)
  • K: 年の下2桁
  • J: 年の上2桁

ツェラーの公式は、1582年10月15日以降の日付に対して有効です。

それ以前の日付に対しては、別の計算方法を使用する必要があります。

ツェラーの公式の実装方法

ツェラーの公式をC言語で実装する方法を解説します。

以下のサンプルコードを参考にしてください。

#include <stdio.h>
int calculateDayOfWeek(int year, int month, int day) {
    int h, q, m, K, J;
    if (month < 3) {
        month += 12;
        year--;
    }
    q = day;
    m = month;
    K = year % 100;
    J = year / 100;
    h = (q + (13 * (m + 1) / 5) + K + (K / 4) + (J / 4) - (2 * J)) % 7;
    return h;
}
int main() {
    int year, month, day;
    int dayOfWeek;
    printf("年を入力してください: ");
    scanf("%d", &year);
    printf("月を入力してください: ");
    scanf("%d", &month);
    printf("日を入力してください: ");
    scanf("%d", &day);
    dayOfWeek = calculateDayOfWeek(year, month, day);
    printf("%d/%d/%d:", year, month, day);
    switch (dayOfWeek) {
        case 0:
            printf("土曜日です。\n");
            break;
        case 1:
            printf("日曜日です。\n");
            break;
        case 2:
            printf("月曜日です。\n");
            break;
        case 3:
            printf("火曜日です。\n");
            break;
        case 4:
            printf("水曜日です。\n");
            break;
        case 5:
            printf("木曜日です。\n");
            break;
        case 6:
            printf("金曜日です。\n");
            break;
        default:
            printf("曜日の計算に失敗しました。\n");
            break;
    }
    return 0;
}

このサンプルコードでは、calculateDayOfWeek関数を使って与えられた年月日から曜日を計算し、結果を表示しています。

main関数では、ユーザーに年月日を入力してもらい、計算結果を表示しています。

以上が、C言語で年月日から曜日を求めるための基本的な考え方とツェラーの公式の実装方法です。

この方法を使えば、任意の年月日から曜日を求めることができます。

目次から探す