C# - 和暦を取得する

和暦を取得するには カルチャーに日本カレンダーを設定し、DateTime構造体のToStringメソッド に 書式"ggy" を指定します。

和暦を表示するサンプルコード

次のサンプルは 2019年4月31日 が 和暦で何年かを表示します。ToStringメソッドの第2引数にカルチャーの指定を忘れないように注意してください。
using System.Globalization;


// 日本語でカルチャー情報を作成
var cultureJa = new CultureInfo("ja-JP");

// カルチャー情報に日本カレンダーを設定
cultureJa.DateTimeFormat.Calendar = new JapaneseCalendar();

// 2019年4月31日
DateTime date = new DateTime(2019, 4, 30);

// 結果="2019年04月30日は平成31年"
Console.WriteLine(date.ToString($"{date.Year}年MM月dd日はggy年", cultureJa));
サンプルコードの実行結果(Visual Studio)
サンプルコードの実行結果(Visual Studio)

1年は元年になる

1年は元年で表示されます。ただし、.NET Framework の古いバージョンを使用している場合や.NETの更新プログラムが適用されていない場合は 1年 で表示されます。
// 2019年5月1日
date = new DateTime(2019, 5, 1);

// 結果="2019年05月01日は令和元年"
Console.WriteLine(date.ToString($"{date.Year}年MM月dd日はggy年", cultureJa));


// 2020年1月1日
date = new DateTime(2020, 1, 1);

// 結果="2020年01月01日は令和2年"
Console.WriteLine(date.ToString($"{date.Year}年MM月dd日はggy年", cultureJa));
サンプルコードの実行結果(Visual Studio)
サンプルコードの実行結果(Visual Studio)

新年号への対応

和暦情報はレジストリに設定されており、Windowsアップデートなどで更新されます。 アップデートが適用できない場合は手動で設定する必要があります。

レジストリの設定箇所

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
レジストリエディタ
レジストリエディタ

検証環境