はじめに 「曜日日本語化」は“ユーザーに優しい日付表示”の仕上げ
曜日そのものは DateTime.DayOfWeek で簡単に取れますが、そのままだと Tuesday のような英語表記です。
業務システムの画面や帳票では、ほぼ確実に「月」「月曜」「月曜日」のような日本語の曜日が求められます。
ここでは、DayOfWeek → 日本語文字列への変換を、
初心者でも迷わない形でユーティリティ化していきます。
「どこでも同じルールで曜日を出せる」ようにしておくことが、実務ではとても大事です。
基本:DayOfWeek を日本語にマッピングする
最も素直な実装:switch で対応表を書く
C# の DayOfWeek は enum(列挙体)で、Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday の7種類です。
これを日本語に変換する一番分かりやすい方法は、
switch で対応表を書くことです。
using System;
public static class JapaneseWeekday
{
public static string ToShort(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 ToLong(DayOfWeek dayOfWeek)
{
return ToShort(dayOfWeek) + "曜日";
}
}
C#使い方はとてもシンプルです。
DateTime d = new DateTime(2026, 2, 10); // 火曜日
DayOfWeek w = d.DayOfWeek;
Console.WriteLine(JapaneseWeekday.ToShort(w)); // 火
Console.WriteLine(JapaneseWeekday.ToLong(w)); // 火曜日
C#ここでの重要ポイントは、
「日本語化のルールを一箇所に閉じ込める」ことです。
画面ごとに "火" とか "火曜日" とか直書きし始めると、
後から表記ゆれを直すのが地獄になります。
日付から直接「2026年2月10日(火)」を作る
日付フォーマットと日本語曜日を組み合わせる
実務では、「日付+曜日」をセットで表示することが多いです。
例えば、予約画面や勤怠画面でよく見るこの形です。
2026年2月10日(火)
先ほどのユーティリティを使えば、こう書けます。
public static class JapaneseDateFormatter
{
public static string ToDateWithWeekday(DateTime date)
{
string dateText = date.ToString("yyyy年M月d日");
string weekday = JapaneseWeekday.ToShort(date.DayOfWeek);
return $"{dateText}({weekday})";
}
}
C#使い方の例です。
DateTime d = new DateTime(2026, 2, 10);
string display = JapaneseDateFormatter.ToDateWithWeekday(d);
Console.WriteLine(display); // 2026年2月10日(火)
C#ここで大事なのは、
「画面でよく使う“日付+曜日”の形を、そのままメソッドにしてしまう」ことです。
これをやっておくと、
どの画面でも同じ見た目・同じルールで日付が表示されるようになり、
ユーザー体験も、コードの保守性もぐっと良くなります。
「短い表記」と「長い表記」をきちんと分ける
「月」と「月曜日」を混ぜない設計にする
業務画面によっては、
カレンダーには「月」、詳細画面には「月曜日」と出したい、
といったニーズがあります。
そのときに、ToJapaneseWeekday という1つのメソッドで
「短いときも長いときも使う」ようにしてしまうと、
どこかで必ず混乱します。
なので、最初から用途別にメソッドを分けるのがおすすめです。
public static class JapaneseWeekday
{
public static string ToShort(DayOfWeek dayOfWeek) // 「月」
public static string ToMedium(DayOfWeek dayOfWeek) // 「月曜」
public static string ToLong(DayOfWeek dayOfWeek) // 「月曜日」
}
C#例えば ToMedium をこう実装できます。
public static string ToMedium(DayOfWeek dayOfWeek)
{
return ToShort(dayOfWeek) + "曜";
}
C#これで、
「カレンダーは短い表記」「帳票は長い表記」など、
画面ごとに使い分けがしやすくなります。
DateTime / DateOnly から直接日本語曜日を取る拡張メソッド
呼び出し側をもっとスッキリさせる
DayOfWeek を毎回取り出してから渡すのが面倒なら、
拡張メソッドにしてしまう手もあります。
using System;
public static class JapaneseWeekdayExtensions
{
public static string ToJapaneseShort(this DateTime date)
{
return JapaneseWeekday.ToShort(date.DayOfWeek);
}
public static string ToJapaneseLong(this DateTime date)
{
return JapaneseWeekday.ToLong(date.DayOfWeek);
}
}
C#使い方はこうなります。
DateTime d = new DateTime(2026, 2, 10);
Console.WriteLine(d.ToJapaneseShort()); // 火
Console.WriteLine(d.ToJapaneseLong()); // 火曜日
C#DateOnly を使っている場合も同じように拡張できます。
public static class JapaneseWeekdayDateOnlyExtensions
{
public static string ToJapaneseShort(this DateOnly date)
{
return JapaneseWeekday.ToShort(date.DayOfWeek);
}
}
C#こうしておくと、
「日付から日本語曜日を取る」という操作が
“メソッド名だけで意味が伝わる” 形になります。
実務での注意点:ロケール任せにしない理由
CultureInfo に頼りすぎると「思ってたのと違う」表示になることもある
.ToString("ddd") や .ToString("dddd") を
カルチャ(CultureInfo)と組み合わせると、
ロケールに応じた曜日文字列を出すこともできます。
ただし、日本語環境でも
「月」「月曜日」ではなく
「月」「月曜日」以外の形式になったり、
サーバーのカルチャ設定に引きずられたりすることがあります。
業務システムでは、
「画面の表記はアプリ側で完全にコントロールしたい」
ということが多いので、
CultureInfo 任せではなく、
今回のように自前のマッピングをユーティリティとして固定するほうが安全です。
まとめ 「曜日日本語化ユーティリティ」は“表記ルールを一箇所に集約する装置”
曜日日本語化は、
単に「英語を日本語にする」だけではなく、
アプリ全体の表記ルールを一箇所に集約するための大事なポイントです。
押さえておきたいのは次のようなことです。
DayOfWeek → 日本語(「月」「月曜日」など)は、switch で対応表を作り、ユーティリティクラスに閉じ込める。
「短い表記」「長い表記」をメソッドで分けておくと、画面ごとの使い分けがしやすくなる。
「日付+曜日」のよく使う表示(例: 2026年2月10日(火))は、専用メソッドにしておくとコードが読みやすくなる。
拡張メソッドを使うと、date.ToJapaneseShort() のように直感的に呼び出せる。
カルチャ任せの曜日表示ではなく、自前のルールをユーティリティで固定しておくと、環境に左右されない安定した表示になる。
ここまで押さえておけば、
「とりあえず DayOfWeek を出している」状態から一歩進んで、
“実務で通用する、統一感のある曜日日本語化ユーティリティ”を
自分のC#コードの中に自然に組み込めるようになります。
