はじめに 「曜日取得」は“人間に寄り添う日付表示”の入口
日付そのものだけでなく、「それが何曜日か」は業務画面でかなり重要です。
勤怠、シフト、予約、カレンダー、締切日…どれも「曜日」が一緒に出ていると、ユーザーの理解が一気に早くなります。
C# では、DateTime や DateOnly から簡単に曜日を取り出せます。
さらに、実務では「日本語の曜日文字列にしたい」「平日か休日かを判定したい」といったニーズも出てきます。
ここでは、
基本の DayOfWeek から始めて、
日本語表示、ユーティリティ化、平日・休日判定まで、
初心者向けにかみ砕いて説明していきます。
基本:DateTime.DayOfWeek で曜日を取り出す
DayOfWeek 列挙体をそのまま使ってみる
一番シンプルな曜日取得は、DateTime の DayOfWeek プロパティです。
using System;
DateTime d1 = new DateTime(2026, 2, 10); // 2026/02/10
DayOfWeek w1 = d1.DayOfWeek;
Console.WriteLine(d1); // 2026/02/10 0:00:00
Console.WriteLine(w1); // Tuesday
C#DayOfWeek は列挙体(enum)で、
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
のいずれかが入ります。
英語の曜日名でよければ、このまま ToString() しても構いません。
ただ、業務システムでは日本語表示が欲しくなることが多いので、次でそこを深掘りします。
日本語の曜日文字列に変換する
シンプルに switch でマッピングする
「火」「火曜」「火曜日」のような日本語の曜日文字列は、DayOfWeek から自分でマッピングしてあげる必要があります。
一番分かりやすいのは switch です。
using System;
public static class WeekdayUtil
{
public static string ToJapaneseShort(DayOfWeek dayOfWeek)
{
switch (dayOfWeek)
{
case DayOfWeek.Sunday: return "日";
case DayOfWeek.Monday: return "月";
case DayOfWeek.Tuesday: return "火";
case DayOfWeek.Wednesday: return "水";
case DayOfWeek.Thursday: return "木";
case DayOfWeek.Friday: return "金";
case DayOfWeek.Saturday: return "土";
default: return "";
}
}
public static string ToJapaneseLong(DayOfWeek dayOfWeek)
{
return ToJapaneseShort(dayOfWeek) + "曜日";
}
}
C#使い方はこうなります。
DateTime d = new DateTime(2026, 2, 10); // 火曜日
DayOfWeek w = d.DayOfWeek;
string shortJp = WeekdayUtil.ToJapaneseShort(w);
string longJp = WeekdayUtil.ToJapaneseLong(w);
Console.WriteLine(shortJp); // 火
Console.WriteLine(longJp); // 火曜日
C#ここでの重要ポイントは、
「DayOfWeek をアプリ内の“共通ルール”で文字列に変換する場所を一箇所にまとめる」ことです。
画面ごとにバラバラに "火" とか "火曜日" とか書き始めると、後から統一が難しくなります。
日付から直接「(火)」のような表示を作る
フォーマットと組み合わせて実務的な表示にする
日付と曜日をセットで表示したい場面はとても多いです。
例えば「2026年2月10日(火)」のような形です。
先ほどのユーティリティを使うと、こう書けます。
DateTime d = new DateTime(2026, 2, 10);
string dateText = d.ToString("yyyy年M月d日");
string weekday = WeekdayUtil.ToJapaneseShort(d.DayOfWeek);
string display = $"{dateText}({weekday})";
Console.WriteLine(display); // 2026年2月10日(火)
C#このパターンをよく使うなら、
「日付+曜日表示」をまとめたユーティリティにしてしまうとさらにスッキリします。
public static class WeekdayDisplayUtil
{
public static string ToJapaneseDateWithWeekday(DateTime date)
{
string dateText = date.ToString("yyyy年M月d日");
string weekday = WeekdayUtil.ToJapaneseShort(date.DayOfWeek);
return $"{dateText}({weekday})";
}
}
C#使い方はこうです。
Console.WriteLine(WeekdayDisplayUtil.ToJapaneseDateWithWeekday(d));
// 2026年2月10日(火)
C#「日付+曜日」の表示ルールを一箇所に閉じ込めておくことで、
画面全体の表記ゆれを防ぎやすくなります。
実務でよく使う「平日/休日判定」ユーティリティ
土日かどうかを判定する
曜日を取れるようになると、次に欲しくなるのが「平日か休日か」です。
まずはシンプルに「土日を休日」とみなすパターンから。
public static class BusinessDayUtil
{
public static bool IsWeekend(DateTime date)
{
DayOfWeek w = date.DayOfWeek;
return w == DayOfWeek.Saturday || w == DayOfWeek.Sunday;
}
public static bool IsWeekday(DateTime date)
{
return !IsWeekend(date);
}
}
C#使い方の例です。
DateTime d1 = new DateTime(2026, 2, 9); // 月
DateTime d2 = new DateTime(2026, 2, 10); // 火
DateTime d3 = new DateTime(2026, 2, 13); // 金
DateTime d4 = new DateTime(2026, 2, 14); // 土
Console.WriteLine(BusinessDayUtil.IsWeekday(d1)); // true
Console.WriteLine(BusinessDayUtil.IsWeekday(d2)); // true
Console.WriteLine(BusinessDayUtil.IsWeekday(d3)); // true
Console.WriteLine(BusinessDayUtil.IsWeekday(d4)); // false
C#「平日だけ処理する」「休日はスキップする」といったロジックは、
このユーティリティを通すことで、if (w != DayOfWeek.Saturday && w != DayOfWeek.Sunday) のような生コードを書かずに済みます。
祝日も含めた「営業日判定」への拡張
実務では、「土日だけでなく祝日も休み」としたいことが多いです。
その場合は、祝日判定ロジックを別に用意し、
それを組み合わせて「営業日かどうか」を判定します。
public static class BusinessDayUtil
{
public static bool IsWeekend(DateTime date)
{
DayOfWeek w = date.DayOfWeek;
return w == DayOfWeek.Saturday || w == DayOfWeek.Sunday;
}
public static bool IsHoliday(DateTime date)
{
// ここは別の祝日カレンダーロジックに委譲する想定
// 実装例:
// return JapaneseHolidayUtil.IsHoliday(date);
return false;
}
public static bool IsBusinessDay(DateTime date)
{
return !IsWeekend(date) && !IsHoliday(date);
}
}
C#祝日ロジック自体は別のクラスに切り出しておき、IsHoliday でそれを呼ぶようにしておくと、
「祝日の定義を差し替える」「テスト用にモックする」といった拡張がしやすくなります。
曜日を数値として扱うときの注意点
DayOfWeek の数値は「日曜が0」から始まる
DayOfWeek は列挙体なので、(int)DayOfWeek.Monday のようにキャストすると数値が取れます。
ただし、その値は「日曜が0、月曜が1、…土曜が6」という並びです。
Console.WriteLine((int)DayOfWeek.Sunday); // 0
Console.WriteLine((int)DayOfWeek.Monday); // 1
Console.WriteLine((int)DayOfWeek.Tuesday); // 2
Console.WriteLine((int)DayOfWeek.Saturday); // 6
C#「月曜を0にしたい」「月〜金を 0〜4 にしたい」といった要件がある場合は、
自分で変換ルールを決める必要があります。
例えば「月曜を0、日曜を6」にしたいなら、こんな感じです。
public static int ToMondayZeroIndex(DayOfWeek dayOfWeek)
{
// Sunday(0) → 6, Monday(1) → 0, Tuesday(2) → 1, ...
int v = (int)dayOfWeek - 1;
if (v < 0) v += 7;
return v;
}
C#曜日を数値で扱うときは、
「何を0としているか」を必ずコメントやメソッド名で明示しておくと、
後から見たときに混乱しません。
まとめ 「曜日取得ユーティリティ」は“日付を人間の感覚に近づける”
曜日取得は、
日付を「人間にとって分かりやすい情報」に変えるための大事な一歩です。
押さえておきたいポイントを整理すると、こうなります。
DateTime.DayOfWeek で DayOfWeek 列挙体(Sunday〜Saturday)が取れる。
日本語の曜日文字列(「火」「火曜日」など)は、自前のマッピング(switch など)でユーティリティ化しておくと、表記ゆれを防げる。
日付+曜日表示(例: 2026年2月10日(火))は、フォーマットと曜日ユーティリティを組み合わせた専用メソッドにしておくと、画面コードがスッキリする。
平日/休日判定は「土日かどうか」から始め、必要に応じて祝日ロジックを組み合わせて「営業日判定」に拡張する。DayOfWeek を数値にキャストすると「日曜=0」になるので、月曜始まりなど別の基準が欲しいときは、自分で変換ルールを決めてユーティリティに閉じ込める。
ここを押さえておくと、
「とりあえず DayOfWeek を出している」状態から一歩進んで、
“人間の感覚に寄り添った、実務で使える曜日ユーティリティ”を
自分のC#コードの中に自然に組み込めるようになっていきます。
