C#で曜日を取得・日本語表示する方法|DateTimeの基本から曜日判定まで解説

はじめに

C#で日付を扱う場面では、「今日が何曜日か知りたい」「指定した日付の曜日を日本語で表示したい」「土日だけ処理を変えたい」といった処理がよくあります。

C#では、DateTime型のDayOfWeekプロパティを使うことで、日付に対応する曜日を簡単に取得できます。ただし、DayOfWeekの値は英語の列挙型で返されるため、そのまま表示するとMondayTuesdayのような英語表記になります。

日本語で「月曜日」「火曜日」と表示したい場合は、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);のように表示すると、MondaySaturdayのような英語表記になります。

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")で曜日名を表示する

DateTimeToStringメソッドでは、書式を指定して日付や曜日を文字列に変換できます。

曜日名を表示するには、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では、曜日だけでなく日付や時刻も自由に組み合わせて表示できます。

曜日表示でよく使うのは、dddddddです。

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

つまり、同じdddddddでも、指定するカルチャによって表示結果が変わります。

3-2. yyyy/MM/ddと曜日を組み合わせて表示する

日付と曜日を組み合わせる場合は、yyyy/MM/dddddまたは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日()

MMddではなく、Mdを使っているため、月や日が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 DateTimeDateTime.ParseDateTime.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数値
日曜日Sunday0
月曜日Monday1
火曜日Tuesday2
水曜日Wednesday3
木曜日Thursday4
金曜日Friday5
土曜日Saturday6

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

日本語で表示したい場合は、ToStringCultureInfoを使います。

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.SaturdayDayOfWeek.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の曜日番号は何を意味する?

DayOfWeekintに変換すると、曜日を数値として取得できます。

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#で曜日を取得するには、DateTimeDayOfWeekプロパティを使います。

C#
DayOfWeek weekday = DateTime.Today.DayOfWeek;

ただし、DayOfWeekをそのまま表示すると、MondayTuesdayのような英語表記になります。日本語で表示したい場合は、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#で曜日を取得・日本語表示・判定する処理を安定して実装できます。