C#で曜日を取得する方法|DateTimeで日本語・英語の曜日を表示するサンプル解説
はじめに
C#で曜日を取得したい場合は、DateTime構造体のDayOfWeekプロパティを使うのが基本です。
たとえば、今日が何曜日かを取得したり、指定した日付の曜日を判定したり、日本語で「月曜日」、英語で「Monday」のように表示したりできます。
C#の曜日取得はシンプルですが、DayOfWeekの戻り値がenum型であることや、数値に変換した場合にSundayが0になること、日本語表示にはCultureInfoを使うことなど、いくつか注意点があります。
この記事では、C#で曜日を取得する方法を、DateTime.Now、DateTime.Today、DayOfWeek、CultureInfoを使ったサンプルコードとあわせて解説します。
1. C#で曜日を取得する基本
1-1. 曜日取得にはDateTime.DayOfWeekを使う
C#で日付から曜日を取得するには、DateTime型のDayOfWeekプロパティを使用します。
C#DateTime date = new DateTime(2026, 6, 18);
DayOfWeek dayOfWeek = date.DayOfWeek;
Console.WriteLine(dayOfWeek);
実行結果は次のようになります。
C#Thursday
DayOfWeekを使うと、指定した日付が日曜日、月曜日、火曜日などのどの曜日にあたるかを取得できます。
1-2. DateTime.Nowで今日の曜日を取得する
現在日時から今日の曜日を取得する場合は、DateTime.Now.DayOfWeekを使います。
C#DayOfWeek today = DateTime.Now.DayOfWeek;
Console.WriteLine(today);
DateTime.Nowは現在の日時を取得するプロパティです。そのため、DateTime.Now.DayOfWeekと書くことで、現在日時に対応する曜日を取得できます。
1-3. 任意の日付から曜日を取得する
任意の日付の曜日を取得したい場合は、new DateTimeで日付を作成してからDayOfWeekを参照します。
C#DateTime date = new DateTime(2025, 1, 1);
Console.WriteLine(date.DayOfWeek);
実行結果は次のようになります。
C#Wednesday
このように、過去の日付や未来の日付でも曜日を取得できます。
1-4. DayOfWeekの戻り値はenum型である点に注意
DayOfWeekの戻り値は文字列ではなく、DayOfWeekというenum型です。
C#DayOfWeek day = DateTime.Now.DayOfWeek;
DayOfWeekには、次の値が定義されています。
C#Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Console.WriteLineで表示すると英語の曜日名として出力されますが、内部的にはenum型です。日本語で表示したい場合や、曜日ごとに処理を分けたい場合は、文字列変換やswitch文などを組み合わせて使います。
2. 今日の曜日を取得するサンプルコード
2-1. DateTime.Now.DayOfWeekで現在の曜日を取得する
今日の曜日を取得する基本コードは次のとおりです。
C#using System;
class Program
{
static void Main()
{
DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
Console.WriteLine(dayOfWeek);
}
}
このコードでは、DateTime.Nowで現在日時を取得し、そのDayOfWeekプロパティから曜日を取得しています。
2-2. Console.WriteLineで曜日を表示する
取得した曜日は、Console.WriteLineでそのまま表示できます。
C#Console.WriteLine(DateTime.Now.DayOfWeek);
たとえば木曜日に実行した場合、次のように表示されます。
C#Thursday
この表示はDayOfWeekのenum名であり、標準では英語表記になります。
2-3. 実行結果の見方
DateTime.Now.DayOfWeekの実行結果は、次のいずれかになります。
C#Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
たとえば、実行結果がMondayであれば月曜日、Fridayであれば金曜日です。
ただし、この値はそのままでは日本語では表示されません。日本語で「月曜日」や「月」のように表示したい場合は、CultureInfoや配列による変換を使います。
2-4. DateTime.Todayとの違い
今日の曜日を取得する場合は、DateTime.Nowの代わりにDateTime.Todayを使うこともできます。
C#Console.WriteLine(DateTime.Today.DayOfWeek);
DateTime.Nowは現在の日時を取得します。
C#2026/06/18 15:30:45
一方、DateTime.Todayは今日の日付を取得し、時刻は00:00:00になります。
C#2026/06/18 00:00:00
曜日取得だけが目的であれば、時刻情報は不要なのでDateTime.Today.DayOfWeekを使っても問題ありません。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
今日の曜日だけを判定したい場合は、DateTime.Todayの方が意図が明確になります。
3. 日本語で曜日を表示する方法
3-1. CultureInfoを使って日本語の曜日を取得する
C#で曜日を日本語表示したい場合は、System.Globalization.CultureInfoを使います。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
DateTime date = DateTime.Today;
CultureInfo culture = new CultureInfo("ja-JP");
string dayName = date.ToString("dddd", culture);
Console.WriteLine(dayName);
}
}
実行結果は次のようになります。
C#木曜日
CultureInfo("ja-JP")を指定することで、日本語のカルチャに基づいた曜日名を取得できます。
3-2. ToString("dddd")で「月曜日」形式にする
DateTime.ToStringに"dddd"を指定すると、曜日の正式名称を取得できます。
C#DateTime date = new DateTime(2026, 6, 18);
string dayName = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(dayName);
実行結果は次のようになります。
C#木曜日
"dddd"は曜日を完全な形式で表示する書式指定子です。日本語の場合は「月曜日」「火曜日」「水曜日」のように表示されます。
3-3. ToString("ddd")で「月」形式にする
曜日を短縮形で表示したい場合は、"ddd"を使います。
C#DateTime date = new DateTime(2026, 6, 18);
string shortDayName = date.ToString("ddd", new CultureInfo("ja-JP"));
Console.WriteLine(shortDayName);
実行結果は次のようになります。
C#木
"ddd"を使うと、日本語では「月」「火」「水」「木」「金」「土」「日」のように、曜日の一文字表記を取得できます。
3-4. 日本語表示のサンプルコード
今日の曜日を日本語で表示するサンプルコードは次のとおりです。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
DateTime today = DateTime.Today;
CultureInfo japaneseCulture = new CultureInfo("ja-JP");
string fullDayName = today.ToString("dddd", japaneseCulture);
string shortDayName = today.ToString("ddd", japaneseCulture);
Console.WriteLine(fullDayName);
Console.WriteLine(shortDayName);
}
}
実行結果の例は次のとおりです。
C#木曜日
木
「木曜日」のように表示したい場合は"dddd"、カレンダーなどで「木」のように短く表示したい場合は"ddd"を使うと便利です。
3-5. CultureInfoを使わず配列で変換する方法
CultureInfoを使わずに、配列で日本語の曜日に変換する方法もあります。
C#using System;
class Program
{
static void Main()
{
string[] japaneseDays =
{
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
};
DateTime today = DateTime.Today;
string dayName = japaneseDays[(int)today.DayOfWeek];
Console.WriteLine(dayName);
}
}
DayOfWeekをintに変換すると、日曜日が0、月曜日が1、土曜日が6になります。そのため、この順番に配列を用意すれば、日本語の曜日名に変換できます。
短縮形にしたい場合は、次のように配列を用意します。
C#string[] shortJapaneseDays = { "日", "月", "火", "水", "木", "金", "土" };
string dayName = shortJapaneseDays[(int)DateTime.Today.DayOfWeek];
Console.WriteLine(dayName);
シンプルな変換であれば配列でも十分ですが、多言語対応を考える場合はCultureInfoを使う方が管理しやすくなります。
4. 英語で曜日を表示する方法
4-1. DayOfWeekをそのまま表示する
DayOfWeekをそのまま表示すると、英語の曜日名が出力されます。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
Console.WriteLine(day);
実行結果の例は次のとおりです。
C#Thursday
簡単に英語の曜日を表示したいだけであれば、この方法で十分です。
4-2. ToString("dddd", CultureInfo)で英語表記にする
明示的に英語の曜日表記を取得したい場合は、CultureInfo("en-US")を指定します。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
DateTime date = new DateTime(2026, 6, 18);
CultureInfo englishCulture = new CultureInfo("en-US");
string dayName = date.ToString("dddd", englishCulture);
Console.WriteLine(dayName);
}
}
実行結果は次のようになります。
C#Thursday
CultureInfoを指定しておくと、実行環境のロケール設定に影響されにくくなります。
4-3. 短縮形の英語曜日を表示する
英語の短縮形を表示する場合は、"ddd"を指定します。
C#DateTime date = new DateTime(2026, 6, 18);
string shortDayName = date.ToString("ddd", new CultureInfo("en-US"));
Console.WriteLine(shortDayName);
実行結果は次のようになります。
C#Thu
"dddd"ではThursday、"ddd"ではThuのように表示されます。
4-4. 英語表示のサンプルコード
英語の曜日を正式名称と短縮形で表示するサンプルコードです。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
DateTime today = DateTime.Today;
CultureInfo englishCulture = new CultureInfo("en-US");
string fullDayName = today.ToString("dddd", englishCulture);
string shortDayName = today.ToString("ddd", englishCulture);
Console.WriteLine(fullDayName);
Console.WriteLine(shortDayName);
}
}
実行結果の例は次のとおりです。
C#Thursday
Thu
英語表記を固定したい場合は、DayOfWeekをそのまま表示するよりも、CultureInfo("en-US")を指定する方法がおすすめです。
5. DayOfWeekを数値や文字列に変換する方法
5-1. DayOfWeekをint型に変換する
DayOfWeekはenum型なので、int型にキャストできます。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
int dayNumber = (int)day;
Console.WriteLine(dayNumber);
木曜日の場合、実行結果は次のようになります。
C#4
曜日を数値として扱いたい場合や、配列のインデックスとして使いたい場合に便利です。
5-2. Sundayが0になる仕様を理解する
DayOfWeekを数値に変換した場合、値は次のようになります。
C#Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
つまり、日曜日が0です。
日本の感覚では月曜日を週の始まりとして扱うことも多いため、Monday = 0だと思い込まないように注意が必要です。
5-3. 月曜日始まりの数値に変換する
月曜日を0、火曜日を1、日曜日を6として扱いたい場合は、次のように変換できます。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
int mondayBasedNumber = ((int)day + 6) % 7;
Console.WriteLine(mondayBasedNumber);
変換結果は次のようになります。
C#Monday = 0
Tuesday = 1
Wednesday = 2
Thursday = 3
Friday = 4
Saturday = 5
Sunday = 6
月曜日始まりのカレンダーや業務システムでは、この形式の方が扱いやすい場合があります。
月曜日を1、日曜日を7にしたい場合は、次のように書けます。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
int mondayBasedNumber = day == DayOfWeek.Sunday ? 7 : (int)day;
Console.WriteLine(mondayBasedNumber);
この場合は次のようになります。
C#Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
Sunday = 7
5-4. switch文で曜日ごとの処理を分ける
曜日ごとに処理を分けたい場合は、switch文を使うと読みやすくなります。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
switch (day)
{
case DayOfWeek.Monday:
Console.WriteLine("週の始まりです。");
break;
case DayOfWeek.Friday:
Console.WriteLine("週末が近いです。");
break;
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("休日です。");
break;
default:
Console.WriteLine("平日です。");
break;
}
DayOfWeek.SaturdayとDayOfWeek.Sundayをまとめて処理すれば、土日判定も簡単に実装できます。
5-5. Dictionaryで曜日名を管理する
曜日名を自由に管理したい場合は、Dictionary<DayOfWeek, string>を使う方法もあります。
C#using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var dayNames = new Dictionary<DayOfWeek, string>
{
{ DayOfWeek.Sunday, "日曜日" },
{ DayOfWeek.Monday, "月曜日" },
{ DayOfWeek.Tuesday, "火曜日" },
{ DayOfWeek.Wednesday, "水曜日" },
{ DayOfWeek.Thursday, "木曜日" },
{ DayOfWeek.Friday, "金曜日" },
{ DayOfWeek.Saturday, "土曜日" }
};
DayOfWeek today = DateTime.Today.DayOfWeek;
Console.WriteLine(dayNames[today]);
}
}
配列でも変換できますが、Dictionaryを使うとDayOfWeek.Mondayのようなenum値と表示名の対応が明確になります。
曜日ごとにメッセージや設定値を持たせたい場合にも便利です。
6. 指定した日付の曜日を取得する方法
6-1. new DateTimeで日付を指定する
特定の日付の曜日を取得するには、new DateTimeで日付を作成します。
C#DateTime date = new DateTime(2026, 6, 18);
Console.WriteLine(date.DayOfWeek);
実行結果は次のようになります。
C#Thursday
new DateTime(年, 月, 日)の形式で日付を指定できます。
C#DateTime date = new DateTime(2025, 12, 31);
このように作成したDateTimeに対してDayOfWeekを使えば、任意の日付の曜日を取得できます。
6-2. 文字列の日付をDateTime.Parseで変換する
文字列として受け取った日付から曜日を取得する場合は、DateTime.ParseでDateTime型に変換できます。
C#string input = "2026/06/18";
DateTime date = DateTime.Parse(input);
Console.WriteLine(date.DayOfWeek);
実行結果は次のようになります。
C#Thursday
ただし、DateTime.Parseは変換できない文字列が渡されると例外が発生します。
C#string input = "abc";
DateTime date = DateTime.Parse(input);
このようなケースではエラーになるため、ユーザー入力を扱う場合はTryParseを使う方が安全です。
6-3. DateTime.TryParseで安全に変換する
DateTime.TryParseを使うと、変換に成功したかどうかを判定できます。
C#string input = "2026/06/18";
if (DateTime.TryParse(input, out DateTime date))
{
Console.WriteLine(date.DayOfWeek);
}
else
{
Console.WriteLine("日付に変換できませんでした。");
}
TryParseは変換に成功した場合はtrue、失敗した場合はfalseを返します。失敗しても例外が発生しないため、ユーザー入力や外部ファイルの値を処理するときに向いています。
6-4. yyyy/MM/dd形式の日付から曜日を取得するサンプル
yyyy/MM/dd形式の日付から曜日を取得し、日本語で表示するサンプルです。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
string input = "2026/06/18";
if (DateTime.TryParseExact(
input,
"yyyy/MM/dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
string dayName = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(dayName);
}
else
{
Console.WriteLine("正しい日付形式ではありません。");
}
}
}
実行結果は次のようになります。
C#木曜日
TryParseExactを使うと、指定した形式に一致する文字列だけを日付として変換できます。
yyyy/MM/dd形式に限定したい場合は、DateTime.TryParseよりもDateTime.TryParseExactを使う方が適しています。
7. 曜日取得でよくある注意点
7-1. タイムゾーンによって日付が変わるケース
曜日を取得するときは、タイムゾーンに注意が必要です。
たとえば、日本時間では月曜日でも、UTCではまだ日曜日というケースがあります。特にWebアプリケーションやクラウド環境では、サーバーのタイムゾーンとユーザーのタイムゾーンが異なることがあります。
C#DateTime localTime = DateTime.Now;
DateTime utcTime = DateTime.UtcNow;
Console.WriteLine(localTime.DayOfWeek);
Console.WriteLine(utcTime.DayOfWeek);
実行するタイミングによっては、DateTime.Now.DayOfWeekとDateTime.UtcNow.DayOfWeekの結果が異なる場合があります。
ユーザーの地域に合わせた曜日を表示したい場合は、対象となるタイムゾーンに変換してから曜日を取得する必要があります。
7-2. DateTime.NowとDateTime.UtcNowの違い
DateTime.Nowはローカル時刻を取得します。
C#DateTime now = DateTime.Now;
一方、DateTime.UtcNowは協定世界時を取得します。
C#DateTime utcNow = DateTime.UtcNow;
日本時間はUTCより9時間進んでいるため、日付の境目では曜日がずれることがあります。
日本時間の曜日を取得したい場合は、基本的には日本時間として扱われるDateTime.Nowや、明示的なタイムゾーン変換を使います。
C#TimeZoneInfo japanTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime japanTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, japanTimeZone);
Console.WriteLine(japanTime.DayOfWeek);
Windows環境では"Tokyo Standard Time"を使います。Linux環境ではタイムゾーンIDが異なる場合があるため、実行環境に合わせて確認してください。
7-3. ロケール設定によって表示言語が変わるケース
ToString("dddd")だけを書くと、実行環境のカルチャ設定によって表示言語が変わる場合があります。
C#DateTime today = DateTime.Today;
Console.WriteLine(today.ToString("dddd"));
日本語環境では「木曜日」、英語環境では「Thursday」のように表示される可能性があります。
表示言語を固定したい場合は、CultureInfoを明示的に指定しましょう。
C#Console.WriteLine(today.ToString("dddd", new CultureInfo("ja-JP")));
Console.WriteLine(today.ToString("dddd", new CultureInfo("en-US")));
これにより、実行環境に依存せず、意図した言語で曜日を表示できます。
7-4. enumの数値を曜日順と勘違いしない
DayOfWeekをintに変換すると、日曜日が0になります。
C#int value = (int)DayOfWeek.Sunday;
Console.WriteLine(value);
実行結果は次のとおりです。
C#0
月曜日を週の始まりとして扱うシステムでは、この仕様を勘違いしやすいです。
たとえば、月曜日始まりのカレンダーを作る場合、(int)DayOfWeek.Mondayが0ではなく1になる点に注意してください。
月曜日始まりに変換したい場合は、次のような補正を入れます。
C#int mondayBased = ((int)DateTime.Today.DayOfWeek + 6) % 7;
7-5. 祝日判定と曜日取得は別処理である
DayOfWeekで取得できるのは、あくまで曜日です。
祝日かどうかは判定できません。
C#DateTime date = new DateTime(2026, 1, 1);
Console.WriteLine(date.DayOfWeek);
このコードでは、指定した日付の曜日は取得できますが、その日が祝日かどうかはわかりません。
祝日判定を行うには、祝日データを持つライブラリや、独自の祝日マスタを用意する必要があります。
たとえば業務システムで営業日判定を行う場合は、次のように曜日判定と祝日判定を分けて考えます。
C#bool isWeekend = date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
bool isHoliday = false; // 祝日マスタなどで別途判定
bool isBusinessDay = !isWeekend && !isHoliday;
土日判定と祝日判定は別の処理として設計しましょう。
8. 実用的な曜日取得のサンプル
8-1. 今日が土日か判定する
今日が土曜日または日曜日かを判定するサンプルです。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
bool isWeekend = today == DayOfWeek.Saturday ||
today == DayOfWeek.Sunday;
Console.WriteLine(isWeekend);
土曜日または日曜日であればtrue、それ以外であればfalseになります。
メソッド化すると再利用しやすくなります。
C#static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
使い方は次のとおりです。
C#if (IsWeekend(DateTime.Today))
{
Console.WriteLine("今日は土日です。");
}
else
{
Console.WriteLine("今日は平日です。");
}
8-2. 平日と休日で処理を分ける
平日と休日で処理を分ける場合は、if文で判定します。
C#DateTime today = DateTime.Today;
if (today.DayOfWeek == DayOfWeek.Saturday ||
today.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine("休日用の処理を実行します。");
}
else
{
Console.WriteLine("平日用の処理を実行します。");
}
業務処理では、バッチ処理を平日のみ実行したり、土日は通知を止めたりするケースがあります。
祝日も休日に含める場合は、別途祝日判定を追加します。
C#bool isWeekend = today.DayOfWeek == DayOfWeek.Saturday ||
today.DayOfWeek == DayOfWeek.Sunday;
bool isHoliday = false; // 祝日判定処理を別途実装
if (isWeekend || isHoliday)
{
Console.WriteLine("休日です。");
}
else
{
Console.WriteLine("平日です。");
}
8-3. 曜日ごとにメッセージを変える
曜日ごとに表示するメッセージを変える場合は、switch式を使うと簡潔に書けます。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
string message = today switch
{
DayOfWeek.Monday => "月曜日です。今週も頑張りましょう。",
DayOfWeek.Tuesday => "火曜日です。少しずつ調子を上げていきましょう。",
DayOfWeek.Wednesday => "水曜日です。週の折り返しです。",
DayOfWeek.Thursday => "木曜日です。あと少しで週末です。",
DayOfWeek.Friday => "金曜日です。週末が近いです。",
DayOfWeek.Saturday => "土曜日です。ゆっくり休みましょう。",
DayOfWeek.Sunday => "日曜日です。明日に備えましょう。",
_ => ""
};
Console.WriteLine(message);
C# 8.0以降では、このようなswitch式を使うことで、曜日ごとの値をわかりやすく定義できます。
8-4. カレンダー表示で曜日を使う
カレンダー表示では、曜日を短縮形で表示することがよくあります。
C#using System;
using System.Globalization;
class Program
{
static void Main()
{
CultureInfo culture = new CultureInfo("ja-JP");
for (int i = 0; i < 7; i++)
{
DateTime date = DateTime.Today.AddDays(i);
string dayName = date.ToString("ddd", culture);
Console.WriteLine($"{date:yyyy/MM/dd} ({dayName})");
}
}
}
実行結果の例は次のとおりです。
C#2026/06/18 (木)
2026/06/19 (金)
2026/06/20 (土)
2026/06/21 (日)
2026/06/22 (月)
2026/06/23 (火)
2026/06/24 (水)
日付と曜日を組み合わせて表示する場合は、ToString("ddd", culture)を使うと見やすくなります。
"dddd"を使えば、次のように表示できます。
C#Console.WriteLine($"{date:yyyy/MM/dd} {date.ToString("dddd", culture)}");
表示例は次のとおりです。
C#2026/06/18 木曜日
8-5. 業務システムで使いやすい実装例
業務システムでは、曜日取得をその場で何度も書くよりも、メソッドとしてまとめると保守しやすくなります。
C#using System;
using System.Globalization;
public static class DateHelper
{
public static string GetJapaneseDayName(DateTime date)
{
return date.ToString("dddd", new CultureInfo("ja-JP"));
}
public static string GetShortJapaneseDayName(DateTime date)
{
return date.ToString("ddd", new CultureInfo("ja-JP"));
}
public static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
public static int GetMondayBasedDayNumber(DateTime date)
{
return ((int)date.DayOfWeek + 6) % 7;
}
}
使い方は次のとおりです。
C#DateTime date = DateTime.Today;
Console.WriteLine(DateHelper.GetJapaneseDayName(date));
Console.WriteLine(DateHelper.GetShortJapaneseDayName(date));
Console.WriteLine(DateHelper.IsWeekend(date));
Console.WriteLine(DateHelper.GetMondayBasedDayNumber(date));
このように共通処理としてまとめておくと、画面表示、帳票出力、カレンダー表示、営業日判定などで再利用しやすくなります。
9. C#の曜日取得に関するよくある質問
9-1. C#で今日の曜日を取得するには?
今日の曜日を取得するには、DateTime.Today.DayOfWeekまたはDateTime.Now.DayOfWeekを使います。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
Console.WriteLine(today);
実行結果は、MondayやTuesdayなどのDayOfWeek enum値になります。
現在日時も含めて扱いたい場合はDateTime.Now、日付だけで十分な場合はDateTime.Todayを使うとよいでしょう。
9-2. 曜日を日本語で表示するには?
曜日を日本語で表示するには、CultureInfo("ja-JP")を指定してToString("dddd")を使います。
C#using System.Globalization;
string dayName = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(dayName);
実行結果の例は次のとおりです。
C#木曜日
短縮形で表示したい場合は、"ddd"を使います。
C#string shortDayName = DateTime.Today.ToString("ddd", new CultureInfo("ja-JP"));
Console.WriteLine(shortDayName);
実行結果の例は次のとおりです。
C#木
9-3. 曜日を英語で表示するには?
DayOfWeekをそのまま表示すると、英語の曜日名になります。
C#Console.WriteLine(DateTime.Today.DayOfWeek);
実行結果の例は次のとおりです。
C#Thursday
明示的に英語表記にしたい場合は、CultureInfo("en-US")を指定します。
C#using System.Globalization;
string dayName = DateTime.Today.ToString("dddd", new CultureInfo("en-US"));
Console.WriteLine(dayName);
短縮形で表示したい場合は、"ddd"を使います。
C#string shortDayName = DateTime.Today.ToString("ddd", new CultureInfo("en-US"));
Console.WriteLine(shortDayName);
実行結果の例は次のとおりです。
C#Thu
9-4. DayOfWeekの数値は何を意味する?
DayOfWeekをintに変換すると、日曜日から土曜日までの数値を取得できます。
C#int dayNumber = (int)DateTime.Today.DayOfWeek;
Console.WriteLine(dayNumber);
対応関係は次のとおりです。
C#Sunday = 0
Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
日曜日が0になる点に注意してください。月曜日始まりの数値ではありません。
9-5. 月曜日始まりで曜日番号を取得できる?
月曜日始まりの曜日番号に変換できます。
月曜日を0、日曜日を6にしたい場合は、次のように書きます。
C#int mondayBasedNumber = ((int)DateTime.Today.DayOfWeek + 6) % 7;
Console.WriteLine(mondayBasedNumber);
対応関係は次のとおりです。
C#Monday = 0
Tuesday = 1
Wednesday = 2
Thursday = 3
Friday = 4
Saturday = 5
Sunday = 6
月曜日を1、日曜日を7にしたい場合は、次のように書きます。
C#DayOfWeek day = DateTime.Today.DayOfWeek;
int dayNumber = day == DayOfWeek.Sunday ? 7 : (int)day;
Console.WriteLine(dayNumber);
対応関係は次のとおりです。
C#Monday = 1
Tuesday = 2
Wednesday = 3
Thursday = 4
Friday = 5
Saturday = 6
Sunday = 7
まとめ
C#で曜日を取得するには、DateTime.DayOfWeekを使います。
今日の曜日を取得する場合は、次のように書けます。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
現在日時から取得したい場合は、次のように書けます。
C#DayOfWeek today = DateTime.Now.DayOfWeek;
日本語で曜日を表示したい場合は、CultureInfo("ja-JP")を指定してToString("dddd")またはToString("ddd")を使います。
C#string dayName = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
英語で表示したい場合は、DayOfWeekをそのまま表示するか、CultureInfo("en-US")を指定します。
C#string dayName = DateTime.Today.ToString("dddd", new CultureInfo("en-US"));
また、DayOfWeekをintに変換すると、日曜日が0、月曜日が1、土曜日が6になります。
C#int dayNumber = (int)DateTime.Today.DayOfWeek;
月曜日始まりの番号にしたい場合は、補正処理が必要です。
C#int mondayBasedNumber = ((int)DateTime.Today.DayOfWeek + 6) % 7;
C#の曜日取得は基本的には簡単ですが、日本語表示、英語表示、数値変換、タイムゾーン、祝日判定などを考慮すると、用途に応じた実装が必要です。
画面表示ではCultureInfo、条件分岐ではDayOfWeek、カレンダーや業務処理では月曜日始まりの変換などを使い分けると、わかりやすく保守しやすいコードになります。

