【C#】和暦の元号インデックス(序数)を元号名(”令和”など)に変換する方法

目次

和暦(元号)のインデックスと名称

C#で和暦(日本の元号)を扱う際、System.Globalization.JapaneseCalendarクラスのGetEra(DateTime date)メソッドを使用すると、その日付が属する元号を**数値のインデックス(序数)**として取得できます。

例えば、DateTimeが「令和」の範囲内であれば5が、「平成」であれば4が返されます。

しかし、このインデックス(5)を、人間が読める文字列("令和")として表示または利用したいケースがあります。この変換は、CultureInfoクラスのDateTimeFormat.GetEraName()メソッドを使用して行います。


GetEraNameメソッドによるインデックスの変換

GetEraName(int eraIndex)メソッドは、DateTimeFormatInfoCultureInfoが保持)に含まれる機能です。このメソッドを正しく動作させるには、CultureInfoのカレンダーとしてJapaneseCalendarが設定されている必要があります。

手順:

  1. CultureInfo("ja-JP")(日本語カルチャ)のインスタンスを生成します。
  2. そのカルチャのカレンダーとしてnew JapaneseCalendar()を設定します。
  3. culture.DateTimeFormat.GetEraName(eraIndex)を呼び出します。

コード例1:指定したインデックスを元号名に変換

ここでは、JapaneseCalendarにおける元号インデックス5(令和に相当)を、文字列"令和"に変換する例を示します。

using System;
using System.Globalization; // CultureInfo, JapaneseCalendar に必要

public class EraNameFromIndexExample
{
    public static void Main()
    {
        // 1. 日本語カルチャ情報を生成
        // (true は、ユーザー設定の上書きを許可しない設定)
        CultureInfo japanCulture = new CultureInfo("ja-JP", true);

        // 2. カルチャのカレンダーとして JapaneseCalendar を明示的に設定
        // これにより GetEraName が和暦ベースで動作する
        japanCulture.DateTimeFormat.Calendar = new JapaneseCalendar();

        // 3. 元号インデックスを指定 (5 = 令和)
        int targetEraIndex = 5;

        // 4. GetEraName でインデックスを元号名(文字列)に変換
        string eraName = japanCulture.DateTimeFormat.GetEraName(targetEraIndex);

        Console.WriteLine($"元号インデックス: {targetEraIndex}");
        Console.WriteLine($"元号名: {eraName}");
    }
}

出力結果:

元号インデックス: 5
元号名: 令和

同様に、インデックス4を指定すれば"平成"が返されます。


コード例2:サポートされている全元号インデックスを一覧表示

JapaneseCalendarクラスが現在サポートしている元号インデックスとその名称は、JapaneseCalendar.Erasプロパティ(インデックスの配列)を利用して動的に一覧表示できます。

using System;
using System.Globalization;

public class ListAllErasExample
{
    public static void Main()
    _WriteLine("--- JapaneseCalendar がサポートする元号一覧 ---");

        var calendar = new JapaneseCalendar();
        var culture = new CultureInfo("ja-JP", true);
        culture.DateTimeFormat.Calendar = calendar;

        // calendar.Eras はサポートされている元号インデックスの配列 (int[])
        // 例: [5, 4, 3, 2, 1] (令和、平成、昭和、大正、明治)
        foreach (int eraIndex in calendar.Eras)
        {
            // 各インデックスを元号名に変換
            string eraName = culture.DateTimeFormat.GetEraName(eraIndex);
            Console.WriteLine($"インデックス {eraIndex} : {eraName}");
        }
    }
}

出力結果(.NETのバージョンや実行環境により順序が異なる場合があります):

--- JapaneseCalendar がサポートする元号一覧 ---
インデックス 5 : 令和
インデックス 4 : 平成
インデックス 3 : 昭和
インデックス 2 : 大正
インデックス 1 : 明治

まとめ

C#で和暦のインデックス(int)を元号名(string)に変換するには、CultureInfo("ja-JP")JapaneseCalendarを準備した上で、culture.DateTimeFormat.GetEraName(eraIndex)メソッドを使用します。

JapaneseCalendar.GetEra(DateTime)GetEraName(int)を組み合わせることで、西暦の日付から元号名を文字列として自由に取得・操作できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次