適材適所

パソコン作業の自動化・効率化のための情報を発信するブログ(VBA,PowerShellなど)

PowerShellで和暦を扱う

令和の喧騒

2019年5月1日に元号が変わりました。

5月は令和一色といった感じで話題になっていましたが、システム界隈では何かと苦労された方も多いのではないでしょうか。

これを機に「和暦表記はやめて西暦で統一しよう」なんてところもあったかも知れません。

それでも、仕事をしていく上でちょこちょこ登場してくる和暦。

パソコン上での彼らの扱い方を知り、仲良くした方が賢明のようです。

ではPowerShellでどのように和暦を扱うか見ていくことにしましょう。

PowerShellで和暦を扱う

$culture = New-Object cultureinfo("ja-JP")
$culture.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar
(get-date).ToString("ggyy年M月d日", $culture)

PowerShellで実行すると、今日の日付が和暦で表示され、令和も表示されるかと思います。 されない場合は・・・更新プログラムの適用が必要です。

PowerShellにおける和暦の管理

PowerShellでの和暦は、.Netでの和暦の管理に依存しています。
.Netとはマイクロソフトの膨大なライブラリ群のことです。
.Netでの和暦は、レジストリから取得しているそうです( .NET Framework 3.5から)。

どんな風に管理されているのか、確認してみます。

PowerShellでは、レジストリもファイルシステムと同じ操作感で扱うことが可能です。

レジストリはここです。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras

PowerShellでレジストリを見てるためには次のとおり実行してみます。

PS C:\> cd HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese
PS HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese> dir


Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese


NameProperty
------------
Eras               1868 01 01 : 明治_明_Meiji_M
               1912 07 30 : 大正_大_Taisho_T
               1926 12 25 : 昭和_昭_Showa_S
               1989 01 08 : 平成_平_Heisei_H
               2019 05 01: 令和_令_Reiwa_R

このレジストリの日付、元号を使って管理されています。 そのため、このレジストリを編集することで元号のテストなどを実施できます。

おまけ:タイの仏歴

おまけで、タイの仏歴はどうなるのか見てみました。 仏歴とはお釈迦様が入滅された日を基準にする暦法です。

$culture = New-Object cultureinfo("th-TH")
$culture.DateTimeFormat.Calendar = New-Object System.Globalization.ThaiBuddhistCalendar
(get-date).ToString($culture)
22/9/2562 13:23:29

西暦に543を足した年が出てきました。

こういうのを見ると、Microsoftの国際化対応は改めてすごいなぁ関心してしまいます。

ここまでお読みいただき、ありがとうございました。

参考サイト様


[MS-LCID]: Appendix A: Product Behavior | Microsoft Docs
レジストリを移動する
Windows 10 レジストリの元号 - Qiita
新元号への対応について - Microsoft mscorp
仏歴(ぶつれき)って知ってる?タイで不思議に思った日付の書き方 | KUBOGEN