C# Tips | 日付・時間処理:曜日日本語化

C# C#
スポンサーリンク

はじめに 「曜日日本語化」は“ユーザーに優しい日付表示”の仕上げ

曜日そのものは 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#コードの中に自然に組み込めるようになります。

タイトルとURLをコピーしました