和暦(元号)のインデックスと名称
C#で和暦(日本の元号)を扱う際、System.Globalization.JapaneseCalendarクラスのGetEra(DateTime date)メソッドを使用すると、その日付が属する元号を**数値のインデックス(序数)**として取得できます。
例えば、DateTimeが「令和」の範囲内であれば5が、「平成」であれば4が返されます。
しかし、このインデックス(5)を、人間が読める文字列("令和")として表示または利用したいケースがあります。この変換は、CultureInfoクラスのDateTimeFormat.GetEraName()メソッドを使用して行います。
GetEraNameメソッドによるインデックスの変換
GetEraName(int eraIndex)メソッドは、DateTimeFormatInfo(CultureInfoが保持)に含まれる機能です。このメソッドを正しく動作させるには、CultureInfoのカレンダーとしてJapaneseCalendarが設定されている必要があります。
手順:
CultureInfo("ja-JP")(日本語カルチャ)のインスタンスを生成します。- そのカルチャのカレンダーとして
new JapaneseCalendar()を設定します。 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)を組み合わせることで、西暦の日付から元号名を文字列として自由に取得・操作できます。
