1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

元号のアルファベット表示(設定ファイル等不使用)

1
Last updated at Posted at 2025-08-06

和暦表示

C#(.NET)標準で和暦表示が可能だが、略号のアルファベット1文字の表示機能は無い
平成・令和等でも良いが、スペースが限られている場合等、H・R等1文字で表示したい

目標

  • DateTimeで和暦表示(アルファベット1文字)をする
  • 今後追加される年号にも対応する
  • 内部に対応表を持たない(プログラム変更不要)
  • 外部ファイルに対応表を持たない(ユーザー修正不要)

コード

public static class DateTimeEx
{
    /// <summary>和暦カルチャ</summary>
    static readonly CultureInfo JP_CULTURE = new("ja-JP");

    /// <summary>元号の短縮形マップ</summary>
    static readonly Dictionary<string, char> ERA_ALPHA = [];

    static DateTimeEx()
    {
        JP_CULTURE.DateTimeFormat.Calendar = new JapaneseCalendar();

        for (var c = 'A'; c <= 'Z'; c++)
        {
            var eraIndex = JP_CULTURE.DateTimeFormat.GetEra(c.ToString());
            if (eraIndex < 0) continue;
            var eraName = JP_CULTURE.DateTimeFormat.GetEraName(eraIndex);
            ERA_ALPHA[eraName] = c;
        }
    }

    /// <summary>元号の短縮形を返します</summary>
    public static char GetEraAlpha(this string era) =>
        ERA_ALPHA.TryGetValue(era, out var result) ? result : '?';

    /// <summary>西暦(和暦短縮形)の形式で年を返します</summary>
    public static string ToEraYearString(this DateTime date)
    {
        var eraName = GetEraAlpha(date.ToString("gg", JP_CULTURE));
        var eraYear = int.Parse(date.ToString("yy", JP_CULTURE));
        return $"{date.Year}({eraName}){eraYear}";
    }
}

元号の更新について(Copilotによる)

✔️ .NET Framework 4.x / .NET Core(Windows上)

  • 元号情報は Windows のレジストリから取得されます 1
  • 新しい元号(例:令和)が追加された場合、Windows Update によってレジストリが更新されることで .NET も自動的に対応します。
  • アプリ側で .NET を更新する必要は基本的にありません。

✔️ .NET Framework 3.5(古いバージョン)

  • 元号情報は .NET 内部にハードコードされていました。
  • ただし、更新によりレジストリ参照に切り替えられたため、Windowsの更新で対応可能になります 1

✔️ .NET Core / .NET 5+(非Windows環境)

  • 元号情報は ICU(International Components for Unicode)ライブラリに依存します。
  • 新元号に対応するには、ICUライブラリの更新が必要です。

まとめ

  • Windows環境であれば、OSを最新に保つことが最も重要です。
  • アプリや .NET ランタイムの更新は基本的に不要ですが、古い環境(.NET 3.5など)では注意が必要です。
  • 非Windows環境では、ICUの更新状況を確認する必要があります
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?