DateTimeから曜日を取得する
C#で日付データを扱う際、その日付が「何曜日」であるかに基づいて処理を分岐させたいケースは非常に一般的です。例えば、「土曜日または日曜日の場合は週末料金を適用する」や、「月曜日の場合は週次レポートを作成する」といったロジックです。
DateTime構造体は、この曜日判定を簡単に行うために DayOfWeek プロパティを提供しています。
DayOfWeek プロパティと DayOfWeek 列挙型
DateTimeオブジェクト(例: DateTime.Now や特定の日付)の DayOfWeek プロパティにアクセスすると、その日付の曜日が返されます。
このプロパティの戻り値の型は int(整数)ではなく、DayOfWeek という専用の「列挙型(enum)」です。
DayOfWeek 列挙型には、以下の7つのメンバーが定義されています。
DayOfWeek.Sunday(内部的な値は 0)DayOfWeek.Monday(1)DayOfWeek.Tuesday(2)DayOfWeek.Wednesday(3)DayOfWeek.Thursday(4)DayOfWeek.Friday(5)DayOfWeek.Saturday(6)
コード例1:曜日の取得と表示
DateTimeオブジェクトから DayOfWeek を取得し、その値をコンソールに出力する基本的な例です。DayOfWeek 型変数をそのまま Console.WriteLine などで出力すると、”Sunday” や “Monday” といった英語の曜日名を表す文字列に自動的に変換されます。
using System;
public class DayOfWeekBasicExample
{
public static void Main()
{
// 判定対象の日付 (2025年11月16日)
DateTime targetDate = new DateTime(2025, 11, 16);
// .DayOfWeek プロパティで曜日を取得
DayOfWeek weekday = targetDate.DayOfWeek;
Console.WriteLine($"対象の日付: {targetDate:yyyy/MM/dd}");
// 列挙型の値をそのまま出力すると、曜日名(英語)になる
Console.WriteLine($"曜日 (DayOfWeek): {weekday}");
}
}
出力結果:
対象の日付: 2025/11/16
曜日 (DayOfWeek): Sunday
コード例2:if文やswitch文による曜日の判定
DayOfWeek プロパティの真価は、if文やswitch文と組み合わせて、曜日に基づく条件分岐を行う際に発揮されます。
if文による週末判定
取得した曜日が DayOfWeek.Saturday または DayOfWeek.Sunday であるかを比較し、週末かどうかを判定する実用的な例です。
using System;
public class DayOfWeekCheckExample
{
public static void Main()
{
// DateTime.Now.DayOfWeek で「今日」の曜日を判定
DayOfWeek today = DateTime.Now.DayOfWeek;
Console.WriteLine($"今日は {today} です。");
// if文で週末かどうかを判定
if (today == DayOfWeek.Saturday || today == DayOfWeek.Sunday)
{
Console.WriteLine("本日は週末料金が適用されます。");
}
else
{
Console.WriteLine("本日は平日料金です。");
}
}
}
(注: このコードを実行する日によって出力結果は変わります)
switch文による判定
switch文(または C# 8.0以降の switch式)を使用すると、曜日ごとに異なる処理をより明確に記述できます。
using System;
public class DayOfWeekSwitchExample
{
public static void Main()
{
DateTime targetDate = new DateTime(2025, 11, 19); // 2025年11月19日 (水曜日)
DayOfWeek weekday = targetDate.DayOfWeek;
string schedule = "";
// switch文で曜日ごとに処理を分岐
switch (weekday)
{
case DayOfWeek.Monday:
schedule = "週次ミーティング";
break;
case DayOfWeek.Wednesday:
case DayOfWeek.Friday:
schedule = "リリース日";
break;
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
schedule = "休業日";
break;
default:
schedule = "通常業務";
break;
}
Console.WriteLine($"日付 {targetDate:d} の予定: {schedule}");
}
}
出力結果:
日付 2025/11/19 の予定: リリース日
まとめ
DateTime.DayOfWeek プロパティは、DateTimeオブジェクトが持つ曜日情報を、DayOfWeek列挙型として簡単に取得できる機能です。
if文やswitch文で DayOfWeek.Monday や DayOfWeek.Sunday といったメンバーと比較することで、曜日に応じたビジネスロジック(週末判定、特定曜日のタスク実行など)を安全かつ直感的に実装できます。
