4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

元号改正に伴う西暦-和暦変換の動作をPowerShellで試す

Last updated at Posted at 2017-01-19

※正式な元号に

Windowsでの元号の取り扱いに関する話?

2017/10/20 追記: 元号に関係する話は西暦-和暦変換だけではなく、様々な事項を考慮せねばならない場合があります。詳細については下記URLのマイクロソフト社のブログ記事もご覧ください。

さて、MSDNのページに日本の元号に関する話が出ておりました。
https://msdn.microsoft.com/en-us/library/windows/desktop/ee923790.aspx?f=255&MSPPError=-2147217396

要するにレジストリで改元日を設定できるのだから、この設定してを変更した場合の西暦-和暦の変換動作を PowerShell で試してみることにする。

レジストリ設定

こんなふうにレジストリに設定すれば、2019年1月1日以降は新しい元号ということになる。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
"2019 05 01"="令和_令_Reiwa_R"

さらに https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068 で紹介されているアクティブ元号移行テストとして2018年5月1日に架空の別の元号を差し込んでもよいだろう。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras] - "2018 05 01"="新元号_新_TestEra_E"

PowerShell での実行内容

こんなカンジに実行すれば、レジストリの内容を確認しつつ西暦和暦変換をテストできる。試験は独立した作業環境で行ったほうがよいだろう。

PS C:\> $path = "HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras"
PS C:\> Get-ItemProperty $path
1868 01 01   : 明治_明_Meiji_M
1912 07 30   : 大正_大_Taisho_T
1926 12 25   : 昭和_昭_Showa_S
1989 01 08   : 平成_平_Heisei_H
2018 05 01   : 新元号_新_TestEra_E
2019 05 01   : 令和_令_Reiwa_R
PSPath       :
 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
PSParentPath :
 Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese
PSChildName  : Eras
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

PS C:\> $CultureInfo = New-Object system.Globalization.CultureInfo("ja-JP");
PS C:\> $CultureInfo.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar
PS C:\> $CurrentDate = Get-Date
PS C:\> $CurrentDate.ToString("ggyy年MM月dd日",$CultureInfo)
新元号01年04月01日

PS C:\> $CurrentDate = [DateTime]"2019/05/01"
PS C:\> $CurrentDate.ToString("ggyy年MM月dd日",$CultureInfo)
令和01年05月01日

PS C:\>

上記の方法は現在の日付と指定した日付を変換させています。

PowerShell でのテストはこんなもんだが、必要に応じて個別のアプリの挙動を確認するとよいでしょう。

そしてテストが終わったらレジストリから設定を消すことをお忘れなく。

その他の注意事項

Windowsで西暦-和暦を扱う処理は他にもいろいろありますが、上記レジストリを見ないAPIもあるようです。和暦を扱う処理については個々のシステムやアプリの内容に合わせた検証が必要ですね。

4
6
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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?