LoginSignup
13

More than 3 years have passed since last update.

Windows 10 レジストリの元号

Last updated at Posted at 2018-06-08

設定はどこにあるのか

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
ここにあります。

レジストリ エディターの表示例

.NET Framework 3.5 ではハードコードされた元号が使われていましたが、レジストリを参照するように統一されました。その他の対応も含め、詳しいことは以下の記事に書いてあります。
新元号への対応について

PowerShell で和暦を表示

$culture = New-Object cultureinfo("ja-JP")
$culture.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar
$date = Get-Date
$date.ToString("ggyy年MM月dd日", $culture)

PowerShell で上記を実行すると 令和元年05月01日 のように表示されます。3行目では現在の日付を取得していますが、任意の日付を表示する場合は $date = [datetime]"2019-05-01" のように指定します。

仮定義による表示の違い

過去の記事につき折りたたんでいます。

April 2018 Update で新しい元号が入る場所には仮の値が追加されました。
このため、レジストリを参照するコントロールや .NET Framework 4 以降などは影響を受けます。

更新プログラム KB4458469 により仮定義が削除されました。引き続き検証が必要な場合は、手動でレジストリに仮の値を追加することができます。October 2018 Update も仮定義が含まれない状態で出荷されています。
Windows 10 Version 1803 における新元号の仮定義の削除について

仮定義 ??_?_??????_? を追加して、どのように表示が変わるのかを比較してみました。
それぞれの環境で JapaneseCalendar クラスを使った同じプログラムを実行しています。

仮定義なし
仮定義なしで実行したときのコマンド プロンプトの表示例
仮定義あり
「元年」の更新プログラム適用前
仮定義あり
「元年」の更新プログラム適用後
仮定義を追加して実行したときのコマンド プロンプトの表示例(「元年」の更新プログラム適用前) 仮定義を追加して実行したときのコマンド プロンプトの表示例(「元年」の更新プログラム適用後)

2019年5月1日以降の元号は「??」に置き換わっています。

また、仮定義がある状態で特定の更新プログラムが適用されていれば「??01年」の部分が「??元年」と表示されるようになっています。以前のように「1年」と出力させることも可能です。設定方法はフレームワークによって異なりますので、以下の記事をご覧ください。
Handling a new era in the Japanese calendar in .NET

使用したソースコードは以下のとおりです。

using System;
using System.Globalization;

internal class Program
{
    private static void Main()
    {
        var culture = new CultureInfo("ja-JP")
        {
            DateTimeFormat = { Calendar = new JapaneseCalendar() }
        };

        var year = new DateTime(2015, 01, 01);
        var date = new DateTime(2019, 04, 26);
        for (var i = 0; i < 10; i++)
        {
            Console.Write(year.ToString("yyyy年") + "\t");
            Console.Write(year.ToString("ggyy年", culture) + "\t");
            Console.WriteLine(date.ToString("ggyy年MM月dd日", culture));
            year = year.AddYears(1);
            date = date.AddDays(1);
        }

        Console.WriteLine();
    }
}

参考情報

2019 年 5 月の新元号への変更に関する更新 | Microsoft サポート
https://support.microsoft.com/ja-jp/help/4470918/updates-for-may-2019-japan-era-change

Japan New Era Name Support Blog | 日本マイクロソフトの新元号 (和暦) 対応に関するサポート情報のブログ
https://blogs.technet.microsoft.com/jperablog/

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
13