新元号発表まであと1週間となりましたが、PowerShellで日付を和暦表示するスクリプトを作ってみました。
# # Get-WarekiDate.ps1 # #パラメータ Param($date, $time) try{ if (($date -eq $null) -And ($time -eq $null)){ #両方nullなら現在の日付を取得 $d = Get-Date } elseif (($date -ne $null) -And ($time -eq $null)) { #指定した日付 $d = [System.DateTime]::Parse($date) } elseif (($date -ne $null) -And ($time -ne $null)) { #指定した日付と時刻 $d = [System.DateTime]::Parse($date + ' ' + $time) } else { #それ以外はエラー Write-Output 'パラメータが間違っています。[日付] [時刻]を指定してください。' exit } $c = New-Object System.Globalization.CultureInfo("ja-JP", $true) $c.DateTimeFormat.Calendar = New-Object System.Globalization.JapaneseCalendar #和暦で表示 $d.ToString("ggy年M月d日 HH:mm:ss", $c) } catch [System.FormatException]{ Write-Host "日付の指定が間違っています。" Write-Host $_ } catch{ Write-Host $_ }少し解説すると、まず、下準備としてCultureInfoクラスで"ja-JP"のインスタンスを作成し、カレンダーを和暦(JapaneseCalendarクラス)に置き換えます。そして、DateTimeオブジェクトのToStringで、第2引数にCultureInfoクラスのインスタンスを指定すれば和暦として表示されます。
Windowsでは和暦情報を下記のレジストリを使って管理しているのですが、PowerShellで和暦表示させる場合もこの情報を取得してきています。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras
PS C:\work\PowerShell> Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras 1868 01 01 : 明治_明_Meiji_M 1912 07 30 : 大正_大_Taisho_T 1926 12 25 : 昭和_昭_Showa_S 1989 01 08 : 平成_平_Heisei_H 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ここには元号が始まった日と表記方法が格納されています。
おそらく4月1日以降マイクロソフトから更新プログラムが公開され、平成の下に新元号のデータが追加されることになると思います。
では、実際に表示させてみます。
PS C:\work\PowerShell> .\Get-WarekiDate.ps1 平成31年3月25日 21:54:10パラメータに何も指定しない場合は、現在の日時が和暦表示されます。
PS C:\work\PowerShell> .\Get-WarekiDate.ps1 1980/3/25 昭和55年3月25日 00:00:00パラメータに日付を指定すると、指定した日付が和暦表示されます。
PS C:\work\PowerShell> .\Get-WarekiDate.ps1 1912/7/30 22:32 大正1年7月30日 22:32:00パラメータに日付と時刻を指定すると、指定した日時が和暦表示されます。
4月1日、どんな元号となるのか楽しみです。
<参考>
西暦と和暦を変換するには?:.NET TIPS - @IT
アプリケーションの新元号対応 | Microsoft Docs
DateTime.ToString Method (System) | Microsoft Docs
CultureInfo Class (System.Globalization) | Microsoft Docs
JapaneseCalendar Class (System.Globalization) | Microsoft Docs