適材適所

システム屋のくらげが気ままに書いているブログです。PowerShellやVBAなどプログラミング系の話をメインに書いています。

MENU

PowerShellで和暦を扱う

令和の喧騒

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

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

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

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

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

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

PowerShellで和暦を扱う

#自分のPCが日本語環境なら$culture = Get-CultureでもOK
$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で確認してみましょう。

PowerShellではレジストリを扱うのも

ファイルシステム(フォルダなど)と同じ操作感で扱うことが可能です。

レジストリはこちらになります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
````

PowerShellでレジストリを見てるために

dir(Get-ChildItem)コマンドを実行してみます。

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

いましたいました。

Windowsではこんな風に管理されているんですね。

このレジストリの日付、元号を使って令和が呼び出されたわけです。

もし今後、元号が変更になるときにPowerShell(に限らず.NET環境で)で

元号のテストを実施したいときは

このレジストリにテストしたい元号を追加すればいいことになりますね。

まぁ、最もMicrosoftの方で間違いなくアップデートしてくれるので

テストしたい、という場面は少ないでしょうが・・・。

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:block; text-align:center;"
    data-ad-layout="in-article"
    data-ad-format="fluid"
    data-ad-client="ca-pub-9573169457351669"
    data-ad-slot="6049649558"></ins>
<script>
    (adsbygoogle = window.adsbygoogle || []).push({});
</script>

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

$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の国際化対応は改めてすごいなぁ関心してしまいます。

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

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:block; text-align:center;"
    data-ad-layout="in-article"
    data-ad-format="fluid"
    data-ad-client="ca-pub-9573169457351669"
    data-ad-slot="6049649558"></ins>
<script>
    (adsbygoogle = window.adsbygoogle || []).push({});
</script>

##参考サイト様
[https://support.microsoft.com/ja-jp/help/4478844/office-updates-for-new-japanese-era:title]  
[https://docs.microsoft.com/ja-jp/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c:title]  
[https://forsenergy.com/ja-jp/windowspowershellhelp/html/b5e1dce6-e97d-4aa3-a8d4-95e7f0cf74e0.htm:title]  
[https://qiita.com/oruponu/items/cc75e19bca39985e64dc:title]  
[https://www.microsoft.com/ja-jp/mscorp/newera/default.aspx:title]  
[https://kubogen.com/journey-thailand-012/:title]  

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:block; text-align:center;"
    data-ad-layout="in-article"
    data-ad-format="fluid"
    data-ad-client="ca-pub-9573169457351669"
    data-ad-slot="6049649558"></ins>
<script>
    (adsbygoogle = window.adsbygoogle || []).push({});
</script>