C#で曜日を取得・日本語表示する方法|DateTimeの基本から曜日判定まで解説
はじめに
C#で日付を扱う場面では、「今日が何曜日か知りたい」「指定した日付の曜日を日本語で表示したい」「土日だけ処理を変えたい」といった処理がよくあります。
C#では、DateTime型のDayOfWeekプロパティを使うことで、日付に対応する曜日を簡単に取得できます。ただし、DayOfWeekの値は英語の列挙型で返されるため、そのまま表示するとMondayやTuesdayのような英語表記になります。
日本語で「月曜日」「火曜日」と表示したい場合は、ToStringの書式指定やCultureInfoを使うのが一般的です。また、曜日を数値として扱ったり、土日判定をしたり、ユーザー入力の日付から曜日を判定したりする場面では、いくつか注意点もあります。
この記事では、C#で曜日を取得する基本から、日本語表示、曜日判定、実務で使えるサンプルコード、よくあるエラーの対処法までわかりやすく解説します。
1. C#で曜日を取得する基本
C#で曜日を取得するには、まずDateTimeを理解しておく必要があります。DateTimeは日付と時刻を表す基本的な型で、現在日時や指定した日付を扱うときによく使います。
曜日の取得には、主に次のような機能を使います。
C#DateTime.Now
DateTime.Today
date.DayOfWeek
特に重要なのがDayOfWeekプロパティです。このプロパティを使うと、対象の日付が日曜日なのか、月曜日なのかといった曜日情報を取得できます。
1-1. DateTimeとは何か
DateTimeは、C#で日付と時刻を扱うための構造体です。
たとえば、次のように特定の日付を表すことができます。
C#DateTime date = new DateTime(2026, 6, 13);
このコードでは、2026年6月13日を表すDateTimeオブジェクトを作成しています。
DateTimeには、年、月、日、時、分、秒などの情報が含まれています。また、曜日を取得するためのDayOfWeekプロパティも用意されています。
C#Console.WriteLine(date.Year); // 2026
Console.WriteLine(date.Month); // 6
Console.WriteLine(date.Day); // 13
Console.WriteLine(date.DayOfWeek); // Saturday
このように、DateTimeを使えば日付に関するさまざまな情報を簡単に取得できます。
1-2. DateTime.Nowで今日の日付と曜日を取得する
現在の日付と時刻を取得したい場合は、DateTime.Nowを使います。
C#DateTime now = DateTime.Now;
Console.WriteLine(now);
Console.WriteLine(now.DayOfWeek);
実行すると、現在の日時と曜日が表示されます。
C#2026/06/16 10:30:00
Tuesday
DateTime.Nowには日付だけでなく、時刻も含まれます。そのため、「今この瞬間の日時」を扱いたい場合に適しています。
今日の曜日を取得したいだけであれば、次のように書けます。
C#DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek;
Console.WriteLine(dayOfWeek);
ただし、このまま表示すると曜日は英語になります。日本語で表示したい場合は、後述するCultureInfoや書式指定を使います。
1-3. DateTime.Todayとの違い
DateTime.Todayは、今日の日付を取得するプロパティです。
DateTime.Nowとの違いは、時刻部分です。
C#DateTime now = DateTime.Now;
DateTime today = DateTime.Today;
Console.WriteLine(now);
Console.WriteLine(today);
実行例は次のようになります。
C#2026/06/16 10:30:00
2026/06/16 0:00:00
DateTime.Nowは現在時刻を含みますが、DateTime.Todayは時刻が00:00:00になります。
曜日を取得するだけであれば、どちらを使っても同じ曜日になります。
C#Console.WriteLine(DateTime.Now.DayOfWeek);
Console.WriteLine(DateTime.Today.DayOfWeek);
今日の曜日を取得するだけなら、時刻が不要なためDateTime.Todayを使うと意図が明確です。
C#DayOfWeek today = DateTime.Today.DayOfWeek;
Console.WriteLine(today);
1-4. DayOfWeekプロパティで曜日を取得する
DayOfWeekプロパティは、DateTimeから曜日を取得するためのプロパティです。
C#DateTime date = new DateTime(2026, 6, 13);
DayOfWeek dayOfWeek = date.DayOfWeek;
Console.WriteLine(dayOfWeek);
実行結果は次のようになります。
C#Saturday
DayOfWeekの戻り値は文字列ではなく、DayOfWeek列挙型です。
C#DayOfWeek dayOfWeek = DateTime.Today.DayOfWeek;
列挙型なので、曜日判定にも使いやすいです。
C#if (DateTime.Today.DayOfWeek == DayOfWeek.Saturday)
{
Console.WriteLine("今日は土曜日です");
}
DayOfWeekを使うことで、文字列比較ではなく安全に曜日を判定できます。
1-5. DayOfWeekの戻り値と英語表記の仕組み
DayOfWeekは、次の7つの値を持つ列挙型です。
C#DayOfWeek.Sunday
DayOfWeek.Monday
DayOfWeek.Tuesday
DayOfWeek.Wednesday
DayOfWeek.Thursday
DayOfWeek.Friday
DayOfWeek.Saturday
そのため、Console.WriteLine(date.DayOfWeek);のように表示すると、MondayやSaturdayのような英語表記になります。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(date.DayOfWeek);
実行結果は次の通りです。
C#Saturday
これは、DayOfWeek列挙型の名前が英語で定義されているためです。
日本語で「土曜日」や「土」と表示したい場合は、DayOfWeekをそのまま表示するのではなく、書式指定や変換処理を行う必要があります。
2. C#で曜日を日本語表示する方法
C#で曜日を日本語表示する方法はいくつかあります。
代表的な方法は次の通りです。
C#date.ToString("dddd", new CultureInfo("ja-JP"))
date.ToString("ddd", new CultureInfo("ja-JP"))
ddddを使うと「月曜日」「火曜日」のような完全表記になり、dddを使うと「月」「火」のような省略表記になります。
2-1. ToString("dddd")で曜日名を表示する
DateTimeのToStringメソッドでは、書式を指定して日付や曜日を文字列に変換できます。
曜日名を表示するには、ddddを使います。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(date.ToString("dddd"));
環境によっては、次のように英語で表示されます。
C#Saturday
これは、実行環境のカルチャ設定が日本語ではない場合があるためです。
日本語で確実に表示したい場合は、CultureInfoを指定します。
2-2. CultureInfoを使って日本語の曜日に変換する
曜日を日本語で表示するには、System.Globalization名前空間のCultureInfoを使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
string dayOfWeek = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(dayOfWeek);
実行結果は次のようになります。
C#土曜日
new CultureInfo("ja-JP")を指定することで、日本語環境として曜日名を取得できます。
英語環境やサーバー環境でも安定して日本語表示したい場合は、CultureInfo("ja-JP")を明示的に指定するのがおすすめです。
2-3. 「月曜日」「火曜日」のように完全表記する方法
「月曜日」「火曜日」「水曜日」のように完全な曜日名を表示するには、ddddを使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 15);
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行結果は次の通りです。
C#月曜日
日付と組み合わせて表示することもできます。
C#DateTime date = new DateTime(2026, 6, 15);
string text = date.ToString("yyyy年M月d日 dddd", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次のようになります。
C#2026年6月15日 月曜日
画面表示や帳票出力などで、曜日を正式に表示したい場合に便利です。
2-4. 「月」「火」のように省略表記する方法
「月」「火」「水」のような省略表記にしたい場合は、dddを使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 16);
string weekday = date.ToString("ddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行結果は次の通りです。
C#火
カレンダー表示や一覧画面では、完全表記よりも省略表記の方が見やすい場合があります。
C#DateTime date = new DateTime(2026, 6, 16);
string text = date.ToString("M/d(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次のようになります。
C#6/16(火)
このように、dddは短い曜日表記を作るときに便利です。
2-5. 曜日を「(月)」形式で表示する方法
日付の後ろに「(月)」「(火)」のように曜日を付けたい場合は、フォーマット文字列の中で括弧を使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 16);
string text = date.ToString("yyyy/MM/dd(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次の通りです。
C#2026/06/16(火)
「2026年6月16日(火)」のように表示したい場合は、次のように書きます。
C#string text = date.ToString("yyyy年M月d日(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次のようになります。
C#2026年6月16日(火)
日本の業務システムではよく使われる形式なので、覚えておくと便利です。
3. DateTimeの曜日フォーマット指定
DateTime.ToStringでは、曜日だけでなく日付や時刻も自由に組み合わせて表示できます。
曜日表示でよく使うのは、dddとddddです。
C#date.ToString("ddd", culture)
date.ToString("dddd", culture)
この2つの違いを理解しておくと、日付表示を柔軟に作れるようになります。
3-1. dddとddddの違い
dddは曜日の省略表記、ddddは曜日の完全表記です。
日本語カルチャを指定した場合、次のようになります。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 16);
CultureInfo culture = new CultureInfo("ja-JP");
Console.WriteLine(date.ToString("ddd", culture));
Console.WriteLine(date.ToString("dddd", culture));
実行結果は次の通りです。
C#火
火曜日
英語カルチャの場合は、次のようになります。
C#CultureInfo culture = new CultureInfo("en-US");
Console.WriteLine(date.ToString("ddd", culture));
Console.WriteLine(date.ToString("dddd", culture));
実行結果は次のようになります。
C#Tue
Tuesday
つまり、同じdddやddddでも、指定するカルチャによって表示結果が変わります。
3-2. yyyy/MM/ddと曜日を組み合わせて表示する
日付と曜日を組み合わせる場合は、yyyy/MM/ddとdddまたはddddを組み合わせます。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 16);
CultureInfo culture = new CultureInfo("ja-JP");
string text = date.ToString("yyyy/MM/dd(ddd)", culture);
Console.WriteLine(text);
実行結果は次の通りです。
C#2026/06/16(火)
完全表記にしたい場合は、ddddを使います。
C#string text = date.ToString("yyyy/MM/dd dddd", culture);
Console.WriteLine(text);
実行結果は次のようになります。
C#2026/06/16 火曜日
一覧画面ではyyyy/MM/dd(ddd)、文章や通知文ではyyyy年M月d日 ddddのように使い分けるとよいでしょう。
3-3. 日付と曜日を「2026年6月13日(土)」形式で表示する
「2026年6月13日(土)」のような形式は、日本語の画面表示でよく使われます。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
string text = date.ToString("yyyy年M月d日(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次の通りです。
C#2026年6月13日(土)
MMやddではなく、Mやdを使っているため、月や日が1桁の場合に先頭のゼロが付きません。
ゼロ埋めしたい場合は、次のようにします。
C#string text = date.ToString("yyyy年MM月dd日(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
実行結果は次のようになります。
C#2026年06月13日(土)
自然な日本語表記にしたいならM月d日、桁数をそろえたいならMM月dd日を使うとよいです。
3-4. フォーマット指定時によく使う書式一覧
C#のDateTime.ToStringでよく使う書式には、次のようなものがあります。
| 書式 | 意味 | 表示例 |
|---|---|---|
yyyy | 西暦4桁 | 2026 |
MM | 月2桁 | 06 |
M | 月1〜2桁 | 6 |
dd | 日2桁 | 13 |
d | 日1〜2桁 | 13 |
ddd | 曜日の省略名 | 土 |
dddd | 曜日の完全名 | 土曜日 |
HH | 時2桁、24時間表記 | 09 |
mm | 分2桁 | 05 |
ss | 秒2桁 | 30 |
たとえば、次のように組み合わせることができます。
C#DateTime date = new DateTime(2026, 6, 13, 9, 5, 30);
CultureInfo culture = new CultureInfo("ja-JP");
Console.WriteLine(date.ToString("yyyy/MM/dd(ddd) HH:mm:ss", culture));
実行結果は次の通りです。
C#2026/06/13(土) 09:05:30
フォーマット指定を覚えておくと、曜日付きの日付表示を柔軟に作成できます。
3-5. 環境によって曜日表示が変わる理由
C#でdate.ToString("dddd")のように書いた場合、曜日の表示は現在のカルチャに依存します。
たとえば、日本語環境では「土曜日」と表示されることがありますが、英語環境では「Saturday」と表示されることがあります。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(date.ToString("dddd"));
環境によって、次のように結果が変わる可能性があります。
C#土曜日
または、
C#Saturday
本番環境、開発環境、クラウド環境で表示結果が変わると困る場合は、必ずCultureInfoを指定しましょう。
C#string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
このように書けば、実行環境に左右されず日本語の曜日を表示できます。
4. 指定した日付の曜日を取得する方法
今日の曜日だけでなく、任意の日付の曜日を取得したい場面もよくあります。
たとえば、次のようなケースです。
誕生日が何曜日か調べる
予約日が土日か判定する
入力された日付に曜日を付けて表示する
カレンダーやスケジュールを作成する
C#では、new DateTimeやDateTime.Parse、DateTime.TryParseを使って指定日付の曜日を取得できます。
4-1. new DateTimeで任意の日付を指定する
日付があらかじめ決まっている場合は、new DateTimeを使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行結果は次の通りです。
C#土曜日
new DateTime(年, 月, 日)の形式で日付を指定します。
C#DateTime date = new DateTime(2026, 12, 25);
Console.WriteLine(date.DayOfWeek);
このように、任意の日付に対してDayOfWeekを使えば曜日を取得できます。
4-2. 文字列の日付をDateTime.Parseで変換する
文字列として受け取った日付から曜日を取得したい場合は、DateTime.Parseを使えます。
C#using System;
using System.Globalization;
string input = "2026/06/13";
DateTime date = DateTime.Parse(input);
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行結果は次の通りです。
C#土曜日
ただし、DateTime.Parseは変換できない文字列が渡されると例外が発生します。
C#string input = "abc";
DateTime date = DateTime.Parse(input);
このようなコードではエラーになります。
ユーザー入力を扱う場合は、次に紹介するDateTime.TryParseを使う方が安全です。
4-3. DateTime.TryParseで安全に曜日を取得する
DateTime.TryParseを使うと、日付文字列の変換に成功したかどうかを判定できます。
C#using System;
using System.Globalization;
string input = "2026/06/13";
if (DateTime.TryParse(input, out DateTime date))
{
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
}
else
{
Console.WriteLine("日付の形式が正しくありません。");
}
実行結果は次の通りです。
C#土曜日
TryParseは、変換に成功するとtrueを返し、変換後の日付をout引数に格納します。失敗した場合はfalseを返すため、例外を発生させずに処理できます。
ユーザーが入力した日付を扱う場合は、基本的にParseよりTryParseを使うのがおすすめです。
4-4. ユーザー入力された日付から曜日を判定する
コンソールアプリでユーザーに日付を入力してもらい、その曜日を表示するサンプルです。
C#using System;
using System.Globalization;
Console.Write("日付を入力してください(例:2026/06/13):");
string? input = Console.ReadLine();
if (DateTime.TryParse(input, out DateTime date))
{
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine($"{date:yyyy/MM/dd}は{weekday}です。");
}
else
{
Console.WriteLine("正しい日付を入力してください。");
}
実行例は次の通りです。
C#日付を入力してください(例:2026/06/13):2026/06/13
2026/06/13は土曜日です。
このように、TryParseを使えば入力チェックと曜日取得を同時に行えます。
4-5. 不正な日付入力への対応方法
ユーザー入力では、不正な日付が入力される可能性があります。
たとえば、次のような入力です。
C#abc
2026/99/99
2026/02/30
これらは正しい日付ではありません。
不正な入力に対応するには、DateTime.TryParseでチェックします。
C#string input = "2026/02/30";
if (!DateTime.TryParse(input, out DateTime date))
{
Console.WriteLine("日付の形式が正しくありません。");
return;
}
Console.WriteLine(date.DayOfWeek);
より厳密にyyyy/MM/dd形式だけを許可したい場合は、DateTime.TryParseExactを使います。
C#using System;
using System.Globalization;
string input = "2026/06/13";
string format = "yyyy/MM/dd";
if (DateTime.TryParseExact(
input,
format,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine(date.ToString("dddd", new CultureInfo("ja-JP")));
}
else
{
Console.WriteLine("yyyy/MM/dd形式で入力してください。");
}
入力形式を固定したい業務システムでは、TryParseExactを使うと安全です。
5. 曜日を判定して条件分岐する方法
曜日を取得するだけでなく、「土曜日ならこの処理」「月曜日ならこの処理」のように条件分岐したい場面もあります。
C#では、DayOfWeekを使って曜日を判定できます。
文字列で比較するよりも、DayOfWeek.Mondayのような列挙型で比較する方が安全です。
5-1. if文で曜日を判定する
特定の曜日かどうかを判定するには、if文を使います。
C#DateTime date = DateTime.Today;
if (date.DayOfWeek == DayOfWeek.Monday)
{
Console.WriteLine("今日は月曜日です。");
}
複数の曜日を判定することもできます。
C#DateTime date = DateTime.Today;
if (date.DayOfWeek == DayOfWeek.Saturday)
{
Console.WriteLine("今日は土曜日です。");
}
else if (date.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine("今日は日曜日です。");
}
else
{
Console.WriteLine("今日は平日です。");
}
DayOfWeekは列挙型なので、スペルミスによるバグを防ぎやすいです。
5-2. switch文で曜日ごとの処理を分ける
曜日ごとに処理を分けたい場合は、switch文が便利です。
C#DateTime date = DateTime.Today;
switch (date.DayOfWeek)
{
case DayOfWeek.Monday:
Console.WriteLine("月曜日の処理");
break;
case DayOfWeek.Tuesday:
Console.WriteLine("火曜日の処理");
break;
case DayOfWeek.Wednesday:
Console.WriteLine("水曜日の処理");
break;
case DayOfWeek.Thursday:
Console.WriteLine("木曜日の処理");
break;
case DayOfWeek.Friday:
Console.WriteLine("金曜日の処理");
break;
case DayOfWeek.Saturday:
Console.WriteLine("土曜日の処理");
break;
case DayOfWeek.Sunday:
Console.WriteLine("日曜日の処理");
break;
}
C#の新しい書き方では、switch式を使うこともできます。
C#string message = DateTime.Today.DayOfWeek switch
{
DayOfWeek.Monday => "月曜日です",
DayOfWeek.Tuesday => "火曜日です",
DayOfWeek.Wednesday => "水曜日です",
DayOfWeek.Thursday => "木曜日です",
DayOfWeek.Friday => "金曜日です",
DayOfWeek.Saturday => "土曜日です",
DayOfWeek.Sunday => "日曜日です",
_ => "不明です"
};
Console.WriteLine(message);
曜日ごとに戻り値を変えたい場合は、switch式がすっきり書けます。
5-3. 土日か平日かを判定する
土日判定は、実務でよく使う処理です。
C#DateTime date = DateTime.Today;
if (date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine("土日です。");
}
else
{
Console.WriteLine("平日です。");
}
メソッド化しておくと再利用しやすくなります。
C#static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
使い方は次の通りです。
C#DateTime date = new DateTime(2026, 6, 13);
if (IsWeekend(date))
{
Console.WriteLine("休日です。");
}
else
{
Console.WriteLine("平日です。");
}
ただし、この判定は土日だけを休日として扱うものです。祝日は考慮していない点に注意しましょう。
5-4. 特定の曜日だけ処理を実行する
「毎週月曜日だけ処理する」「金曜日だけ通知する」といった場合も、DayOfWeekで判定できます。
C#DateTime today = DateTime.Today;
if (today.DayOfWeek == DayOfWeek.Monday)
{
Console.WriteLine("週次レポートを作成します。");
}
複数の曜日を対象にする場合は、条件を追加します。
C#DateTime today = DateTime.Today;
if (today.DayOfWeek == DayOfWeek.Monday ||
today.DayOfWeek == DayOfWeek.Thursday)
{
Console.WriteLine("定期処理を実行します。");
}
対象曜日が多い場合は、配列やリストを使うと見やすくなります。
C#DayOfWeek[] targetDays =
{
DayOfWeek.Monday,
DayOfWeek.Wednesday,
DayOfWeek.Friday
};
if (targetDays.Contains(DateTime.Today.DayOfWeek))
{
Console.WriteLine("対象曜日です。");
}
この場合は、System.Linqが必要です。
C#using System.Linq;
5-5. DayOfWeekの比較で注意すべきポイント
DayOfWeekを比較するときは、文字列ではなく列挙型で比較するのが基本です。
避けたい書き方は次のような文字列比較です。
C#if (DateTime.Today.DayOfWeek.ToString() == "Monday")
{
Console.WriteLine("月曜日です。");
}
この書き方でも動作しますが、文字列のスペルミスに弱く、保守性も高くありません。
おすすめは次の書き方です。
C#if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)
{
Console.WriteLine("月曜日です。");
}
また、日本語表示した文字列で曜日判定するのも避けた方がよいです。
C#string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
if (weekday == "月曜日")
{
Console.WriteLine("月曜日です。");
}
表示用の文字列はあくまで表示に使い、判定にはDayOfWeekを使いましょう。
6. 曜日を数値として扱う方法
C#のDayOfWeekは列挙型なので、intに変換できます。
ただし、C#では日曜日が0、月曜日が1、土曜日が6です。
この仕様を知らないと、「月曜日始まりのつもりだったのに日曜日が0になっている」というミスが起きやすくなります。
6-1. DayOfWeekをintに変換する
DayOfWeekを数値に変換するには、intにキャストします。
C#DateTime date = new DateTime(2026, 6, 14);
int dayNumber = (int)date.DayOfWeek;
Console.WriteLine(dayNumber);
実行結果は次の通りです。
C#0
2026年6月14日は日曜日なので、0になります。
各曜日の数値は次の通りです。
| 曜日 | DayOfWeek | 数値 |
|---|---|---|
| 日曜日 | Sunday | 0 |
| 月曜日 | Monday | 1 |
| 火曜日 | Tuesday | 2 |
| 水曜日 | Wednesday | 3 |
| 木曜日 | Thursday | 4 |
| 金曜日 | Friday | 5 |
| 土曜日 | Saturday | 6 |
6-2. 日曜日が0になる仕様を理解する
C#のDayOfWeekでは、日曜日が0です。
C#Console.WriteLine((int)DayOfWeek.Sunday); // 0
Console.WriteLine((int)DayOfWeek.Monday); // 1
Console.WriteLine((int)DayOfWeek.Saturday); // 6
日本ではカレンダーや業務ロジックによって、月曜日始まりで扱いたい場合があります。
その場合、単純に(int)date.DayOfWeekを使うと想定とずれることがあります。
たとえば、月曜日を1、日曜日を7として扱いたい場合は変換が必要です。
6-3. 月曜日始まりの曜日番号に変換する
月曜日を1、火曜日を2、日曜日を7にしたい場合は、次のように変換できます。
C#static int GetMondayBasedDayNumber(DateTime date)
{
int number = (int)date.DayOfWeek;
return number == 0 ? 7 : number;
}
使い方は次の通りです。
C#DateTime date = new DateTime(2026, 6, 14);
int dayNumber = GetMondayBasedDayNumber(date);
Console.WriteLine(dayNumber);
実行結果は次の通りです。
C#7
日曜日はDayOfWeekでは0ですが、このメソッドでは7に変換されます。
月曜日を0、火曜日を1、日曜日を6にしたい場合は、次のように書けます。
C#static int GetMondayStartZeroBasedNumber(DateTime date)
{
return ((int)date.DayOfWeek + 6) % 7;
}
この変換では、曜日番号は次のようになります。
| 曜日 | 数値 |
|---|---|
| 月曜日 | 0 |
| 火曜日 | 1 |
| 水曜日 | 2 |
| 木曜日 | 3 |
| 金曜日 | 4 |
| 土曜日 | 5 |
| 日曜日 | 6 |
カレンダー表示の列番号を計算するときに便利です。
6-4. 曜日番号から日本語の曜日名を取得する
曜日番号から日本語の曜日名を取得したい場合は、配列を使うと簡単です。
C#のDayOfWeekと同じく日曜日始まりにするなら、次のように配列を定義します。
C#string[] weekdays =
{
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
};
int number = (int)DateTime.Today.DayOfWeek;
Console.WriteLine(weekdays[number]);
省略表記にする場合は、次のようにします。
C#string[] weekdays = { "日", "月", "火", "水", "木", "金", "土" };
int number = (int)DateTime.Today.DayOfWeek;
Console.WriteLine(weekdays[number]);
DayOfWeekの数値仕様と配列の順番を合わせることが重要です。
6-5. 配列を使って曜日を変換する方法
DayOfWeekを日本語に変換する処理をメソッド化しておくと便利です。
C#static string GetJapaneseWeekday(DateTime date)
{
string[] weekdays = { "日", "月", "火", "水", "木", "金", "土" };
return weekdays[(int)date.DayOfWeek];
}
使い方は次の通りです。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(GetJapaneseWeekday(date));
実行結果は次の通りです。
C#土
完全表記にしたい場合は、配列の中身を変えます。
C#static string GetJapaneseWeekdayFull(DateTime date)
{
string[] weekdays =
{
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
};
return weekdays[(int)date.DayOfWeek];
}
ただし、日本語表示だけが目的なら、基本的にはToString("ddd", new CultureInfo("ja-JP"))やToString("dddd", new CultureInfo("ja-JP"))を使う方がシンプルです。
配列による変換は、独自表記を使いたい場合に向いています。
7. 実務で使える曜日取得のサンプルコード
ここでは、実務でそのまま応用しやすい曜日取得のサンプルコードを紹介します。
今日の曜日表示、指定日付の曜日取得、日付一覧への曜日付け、土日判定、カレンダー表示など、よく使うパターンを確認しましょう。
7-1. 今日の曜日を日本語で表示するサンプル
今日の曜日を日本語で表示する基本的なサンプルです。
C#using System;
using System.Globalization;
DateTime today = DateTime.Today;
string weekday = today.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine($"今日は{weekday}です。");
実行例は次の通りです。
C#今日は火曜日です。
省略表記にしたい場合は、dddを使います。
C#string weekday = today.ToString("ddd", new CultureInfo("ja-JP"));
Console.WriteLine($"今日は{weekday}です。");
実行例は次のようになります。
C#今日は火です。
画面表示では、次のような形式もよく使います。
C#string text = today.ToString("yyyy/MM/dd(ddd)", new CultureInfo("ja-JP"));
Console.WriteLine(text);
7-2. 指定日付の曜日を取得するサンプル
任意の日付を指定して曜日を取得するサンプルです。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine($"{date:yyyy/MM/dd}は{weekday}です。");
実行結果は次の通りです。
C#2026/06/13は土曜日です。
DayOfWeekを使って判定もできます。
C#if (date.DayOfWeek == DayOfWeek.Saturday)
{
Console.WriteLine("指定日は土曜日です。");
}
表示にはToString、判定にはDayOfWeekを使い分けるのが基本です。
7-3. 日付一覧に曜日を付けて表示するサンプル
指定した期間の日付一覧に曜日を付けて表示するサンプルです。
C#using System;
using System.Globalization;
DateTime start = new DateTime(2026, 6, 1);
DateTime end = new DateTime(2026, 6, 7);
CultureInfo culture = new CultureInfo("ja-JP");
for (DateTime date = start; date <= end; date = date.AddDays(1))
{
string text = date.ToString("yyyy/MM/dd(ddd)", culture);
Console.WriteLine(text);
}
実行結果は次のようになります。
C#2026/06/01(月)
2026/06/02(火)
2026/06/03(水)
2026/06/04(木)
2026/06/05(金)
2026/06/06(土)
2026/06/07(日)
AddDays(1)を使うことで、1日ずつ日付を進められます。
スケジュール一覧、予約一覧、勤怠管理などでよく使う書き方です。
7-4. 土日だけ処理を変えるサンプル
土日だけ表示や処理を変えるサンプルです。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
CultureInfo culture = new CultureInfo("ja-JP");
string text = date.ToString("yyyy/MM/dd(ddd)", culture);
if (date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine($"{text} は休日扱いです。");
}
else
{
Console.WriteLine($"{text} は平日です。");
}
実行結果は次の通りです。
C#2026/06/13(土) は休日扱いです。
メソッド化する場合は、次のように書けます。
C#static bool IsWeekend(DateTime date)
{
return date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
}
祝日まで判定したい場合は、別途祝日データやライブラリを利用する必要があります。
7-5. カレンダー表示で曜日を利用するサンプル
簡易的なカレンダー表示で曜日を利用するサンプルです。
C#using System;
int year = 2026;
int month = 6;
DateTime firstDay = new DateTime(year, month, 1);
int daysInMonth = DateTime.DaysInMonth(year, month);
Console.WriteLine($"{year}年{month}月");
Console.WriteLine("日 月 火 水 木 金 土");
for (int i = 0; i < (int)firstDay.DayOfWeek; i++)
{
Console.Write(" ");
}
for (int day = 1; day <= daysInMonth; day++)
{
DateTime current = new DateTime(year, month, day);
Console.Write($"{day,2} ");
if (current.DayOfWeek == DayOfWeek.Saturday)
{
Console.WriteLine();
}
}
このサンプルでは、月初の曜日をfirstDay.DayOfWeekで取得し、その数だけ空白を出力しています。
DayOfWeek.Saturdayになったら改行することで、日曜日始まりのカレンダー形式にしています。
カレンダー表示では、曜日番号の仕様が重要です。C#では日曜日が0、土曜日が6なので、日曜日始まりのカレンダーとは相性がよいです。
8. C#で曜日を扱うときの注意点
C#で曜日を扱う処理はシンプルですが、実務ではいくつか注意点があります。
特に、ロケール、タイムゾーン、UTC、和暦、DateOnlyを使う場合には、想定と違う結果にならないように気をつける必要があります。
8-1. ロケール設定による表示の違い
曜日表示はカルチャによって変わります。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(date.ToString("dddd"));
このコードは、環境によって「土曜日」と表示される場合もあれば、「Saturday」と表示される場合もあります。
日本語で固定したい場合は、次のようにCultureInfo("ja-JP")を指定します。
C#using System.Globalization;
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
多言語対応システムでは、ユーザーの言語設定に合わせてカルチャを切り替えることもあります。
C#CultureInfo culture = new CultureInfo("en-US");
Console.WriteLine(date.ToString("dddd", culture));
日本語表示を固定するのか、ユーザーの言語設定に合わせるのかを明確にして実装しましょう。
8-2. DateTimeとタイムゾーンの関係
DateTime.Nowは、実行環境のローカル時刻を取得します。
C#DateTime now = DateTime.Now;
サーバーのタイムゾーンが日本ではない場合、日本時間とは異なる日時になる可能性があります。
たとえば、クラウド環境や海外サーバーで動作しているアプリケーションでは、DateTime.Nowの結果が想定と違うことがあります。
日本時間で曜日を判定したい場合は、タイムゾーンを考慮する必要があります。
C#TimeZoneInfo japanTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime japanTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, japanTimeZone);
Console.WriteLine(japanTime.ToString("yyyy/MM/dd(ddd)", new CultureInfo("ja-JP")));
ただし、タイムゾーンIDは実行環境によって扱いに注意が必要です。Windows環境ではTokyo Standard Timeが使われます。
8-3. UTC時刻を使う場合の注意点
DateTime.UtcNowは協定世界時、つまりUTCの現在日時を返します。
C#DateTime utcNow = DateTime.UtcNow;
UTCと日本時間には9時間の差があります。そのため、UTCのまま曜日を判定すると、日本時間での曜日とずれることがあります。
C#DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow.DayOfWeek);
日本時間の曜日を判定したい場合は、UTCから日本時間に変換してからDayOfWeekを取得します。
C#using System;
using System.Globalization;
DateTime utcNow = DateTime.UtcNow;
TimeZoneInfo japanTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime japanTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, japanTimeZone);
Console.WriteLine(japanTime.ToString("yyyy/MM/dd(ddd) HH:mm", new CultureInfo("ja-JP")));
日付の境界付近、つまり深夜や早朝の処理では特に注意しましょう。
8-4. 和暦表示と曜日表示を組み合わせる場合
和暦表示と曜日表示を組み合わせたい場合も、CultureInfo("ja-JP")を使います。
C#using System;
using System.Globalization;
DateTime date = new DateTime(2026, 6, 13);
CultureInfo culture = new CultureInfo("ja-JP");
culture.DateTimeFormat.Calendar = new JapaneseCalendar();
string text = date.ToString("ggy年M月d日(ddd)", culture);
Console.WriteLine(text);
実行例は次のようになります。
C#令和8年6月13日(土)
ggは元号、yは和暦年を表します。
ただし、和暦表示は元号の扱いが関係するため、通常の西暦表示よりも注意が必要です。単に曜日を日本語表示したいだけであれば、和暦カレンダーを設定する必要はありません。
C#string text = date.ToString("yyyy年M月d日(ddd)", new CultureInfo("ja-JP"));
西暦で問題ない場合は、この書き方の方がシンプルです。
8-5. DateOnlyを使う場合の曜日取得
.NET 6以降では、日付だけを扱うDateOnly型が使えます。
DateOnlyは時刻情報を持たないため、誕生日、予約日、営業日など、日付だけを扱いたい場合に便利です。
C#DateOnly date = new DateOnly(2026, 6, 13);
Console.WriteLine(date.DayOfWeek);
実行結果は次の通りです。
C#Saturday
DateOnlyにもDayOfWeekプロパティがあります。
日本語で表示したい場合は、一度DateTimeに変換する方法があります。
C#using System;
using System.Globalization;
DateOnly dateOnly = new DateOnly(2026, 6, 13);
DateTime dateTime = dateOnly.ToDateTime(TimeOnly.MinValue);
string weekday = dateTime.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行結果は次の通りです。
C#土曜日
時刻が不要な処理ではDateOnlyを使うと、意図が明確になります。
9. C#の曜日取得でよくあるエラーと対処法
C#で曜日を取得するときには、いくつかよくあるつまずきがあります。
代表的なものは次の通りです。
曜日が英語で表示される
想定と違う曜日が表示される
日付文字列の変換に失敗する
CultureInfoが反映されない曜日判定の条件分岐が動かない
原因を理解しておくと、トラブルにすぐ対応できます。
9-1. 曜日が英語で表示される場合
DayOfWeekをそのまま表示すると、曜日は英語になります。
C#Console.WriteLine(DateTime.Today.DayOfWeek);
実行結果は次のようになります。
C#Tuesday
これはDayOfWeekが英語名の列挙型だからです。
日本語で表示したい場合は、次のようにします。
C#using System.Globalization;
string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
省略表記にしたい場合は、dddを使います。
C#string weekday = DateTime.Today.ToString("ddd", new CultureInfo("ja-JP"));
DayOfWeekは判定用、ToString("ddd" / "dddd", CultureInfo)は表示用と考えると整理しやすいです。
9-2. 想定と違う曜日が表示される場合
想定と違う曜日が表示される場合、原因として多いのは日付やタイムゾーンのずれです。
たとえば、UTC時刻をそのまま使っている場合、日本時間とは日付が異なることがあります。
C#DateTime utcNow = DateTime.UtcNow;
Console.WriteLine(utcNow.DayOfWeek);
日本時間で判定したい場合は、日本時間に変換してから曜日を取得します。
C#TimeZoneInfo japanTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime japanTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, japanTimeZone);
Console.WriteLine(japanTime.DayOfWeek);
また、入力した日付そのものが想定と違っている場合もあります。
C#DateTime date = new DateTime(2026, 6, 13);
Console.WriteLine(date.ToString("yyyy/MM/dd(ddd)", new CultureInfo("ja-JP")));
曜日がおかしいと感じたら、まず対象の日付を明示的に出力して確認しましょう。
9-3. 日付文字列の変換に失敗する場合
DateTime.Parseは、不正な日付文字列を変換しようとすると例外が発生します。
C#string input = "2026/02/30";
DateTime date = DateTime.Parse(input);
このような不正な日付は変換できません。
安全に処理したい場合は、DateTime.TryParseを使います。
C#string input = "2026/02/30";
if (DateTime.TryParse(input, out DateTime date))
{
Console.WriteLine(date.DayOfWeek);
}
else
{
Console.WriteLine("日付の形式が正しくありません。");
}
入力形式を固定したい場合は、TryParseExactを使います。
C#string input = "2026/06/13";
if (DateTime.TryParseExact(
input,
"yyyy/MM/dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out DateTime date))
{
Console.WriteLine(date.ToString("dddd", new CultureInfo("ja-JP")));
}
else
{
Console.WriteLine("yyyy/MM/dd形式で入力してください。");
}
ユーザー入力を扱う場合は、例外が起きない設計にすることが大切です。
9-4. CultureInfoが反映されない場合
CultureInfoを指定したつもりでも、日本語表示にならない場合は、ToStringの呼び出し方を確認しましょう。
次のようにDayOfWeekに対してToStringしても、日本語にはなりません。
C#string weekday = DateTime.Today.DayOfWeek.ToString();
これはDayOfWeek列挙型を文字列化しているだけなので、Tuesdayのような英語になります。
日本語化したい場合は、DateTimeに対してToStringを呼び出します。
C#string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
正しい書き方は次の通りです。
C#DateTime date = DateTime.Today;
CultureInfo culture = new CultureInfo("ja-JP");
string weekday = date.ToString("dddd", culture);
CultureInfoは、DateTimeの書式指定に対して使うと覚えておきましょう。
9-5. 曜日判定の条件分岐が動かない場合
曜日判定がうまく動かない場合は、文字列比較をしていないか確認しましょう。
たとえば、次のようなコードは環境や表記の違いに弱いです。
C#if (DateTime.Today.DayOfWeek.ToString() == "月曜日")
{
Console.WriteLine("月曜日です。");
}
DateTime.Today.DayOfWeek.ToString()は通常Mondayのような英語になるため、"月曜日"とは一致しません。
曜日判定では、次のようにDayOfWeek列挙型を使います。
C#if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)
{
Console.WriteLine("月曜日です。");
}
土日判定も同様です。
C#if (DateTime.Today.DayOfWeek == DayOfWeek.Saturday ||
DateTime.Today.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine("土日です。");
}
表示用の文字列と判定用の値は分けて考えることが重要です。
10. C#の曜日取得に関するよくある質問
ここでは、C#で曜日を取得・表示・判定するときによくある質問に回答します。
10-1. C#で今日の曜日を取得するには?
今日の曜日を取得するには、DateTime.Today.DayOfWeekを使います。
C#DayOfWeek weekday = DateTime.Today.DayOfWeek;
Console.WriteLine(weekday);
実行結果は、次のように英語で表示されます。
C#Tuesday
日本語で表示したい場合は、ToStringとCultureInfoを使います。
C#using System.Globalization;
string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
実行例は次の通りです。
C#火曜日
10-2. C#で曜日を日本語にするには?
曜日を日本語にするには、CultureInfo("ja-JP")を指定します。
C#using System;
using System.Globalization;
DateTime date = DateTime.Today;
string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
Console.WriteLine(weekday);
「月」「火」のような省略表記にしたい場合は、dddを使います。
C#string weekday = date.ToString("ddd", new CultureInfo("ja-JP"));
「月曜日」「火曜日」のような完全表記にしたい場合は、ddddを使います。
C#string weekday = date.ToString("dddd", new CultureInfo("ja-JP"));
10-3. C#で土日判定をするには?
土日判定をするには、DayOfWeek.SaturdayとDayOfWeek.Sundayを比較します。
C#DateTime date = DateTime.Today;
bool isWeekend = date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday;
Console.WriteLine(isWeekend);
メソッド化する場合は次のように書けます。
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("平日です。");
}
祝日も含めた休日判定をしたい場合は、別途祝日データが必要です。
10-4. DayOfWeekの曜日番号は何を意味する?
DayOfWeekをintに変換すると、曜日を数値として取得できます。
C#int number = (int)DateTime.Today.DayOfWeek;
数値の意味は次の通りです。
| 曜日 | 数値 |
|---|---|
| 日曜日 | 0 |
| 月曜日 | 1 |
| 火曜日 | 2 |
| 水曜日 | 3 |
| 木曜日 | 4 |
| 金曜日 | 5 |
| 土曜日 | 6 |
注意点は、日曜日が0であることです。
月曜日始まりで扱いたい場合は、必要に応じて変換します。
C#int number = (int)DateTime.Today.DayOfWeek;
int mondayBased = number == 0 ? 7 : number;
この場合、月曜日が1、日曜日が7になります。
10-5. DateTimeとDateOnlyのどちらを使うべき?
時刻も含めて扱いたい場合はDateTimeを使います。
C#DateTime dateTime = DateTime.Now;
一方、日付だけを扱いたい場合は、.NET 6以降で利用できるDateOnlyも選択肢になります。
C#DateOnly dateOnly = new DateOnly(2026, 6, 13);
Console.WriteLine(dateOnly.DayOfWeek);
予約日、誕生日、営業日など、時刻が不要なデータではDateOnlyの方が意図を表しやすいです。
ただし、既存のライブラリやデータベース処理ではDateTimeの方が扱いやすい場面もあります。
日本語で曜日を表示したい場合、DateTimeなら次のように簡単に書けます。
C#string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
DateOnlyを使う場合は、必要に応じてDateTimeに変換します。
C#DateOnly dateOnly = new DateOnly(2026, 6, 13);
DateTime dateTime = dateOnly.ToDateTime(TimeOnly.MinValue);
string weekday = dateTime.ToString("dddd", new CultureInfo("ja-JP"));
日付と時刻の両方が必要ならDateTime、日付だけで十分ならDateOnlyを検討するとよいでしょう。
まとめ
C#で曜日を取得するには、DateTimeのDayOfWeekプロパティを使います。
C#DayOfWeek weekday = DateTime.Today.DayOfWeek;
ただし、DayOfWeekをそのまま表示すると、MondayやTuesdayのような英語表記になります。日本語で表示したい場合は、ToStringの書式指定とCultureInfo("ja-JP")を使います。
C#string weekday = DateTime.Today.ToString("dddd", new CultureInfo("ja-JP"));
「月曜日」「火曜日」のような完全表記にはdddd、「月」「火」のような省略表記にはdddを使います。
C#date.ToString("dddd", new CultureInfo("ja-JP")); // 月曜日
date.ToString("ddd", new CultureInfo("ja-JP")); // 月
日付と組み合わせて表示する場合は、次のように書けます。
C#string text = date.ToString("yyyy年M月d日(ddd)", new CultureInfo("ja-JP"));
曜日を判定する場合は、表示用の文字列ではなくDayOfWeek列挙型を使うのが安全です。
C#if (date.DayOfWeek == DayOfWeek.Saturday ||
date.DayOfWeek == DayOfWeek.Sunday)
{
Console.WriteLine("土日です。");
}
また、DayOfWeekを数値に変換すると、日曜日が0、月曜日が1、土曜日が6になります。月曜日始まりで扱いたい場合は、必要に応じて変換しましょう。
C#で曜日を扱うときは、次のポイントを押さえておくことが大切です。
曜日取得には
DayOfWeekを使う日本語表示には
CultureInfo("ja-JP")を指定するdddは省略表記、ddddは完全表記判定には文字列ではなく
DayOfWeekを使う日曜日は数値では
0になるUTCやタイムゾーンを使う場合は日付のずれに注意する
日付だけを扱うなら
DateOnlyも検討する
これらを理解しておけば、C#で曜日を取得・日本語表示・判定する処理を安定して実装できます。

