新元号発表まであと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
スポンサーリンク