-1. 前置きの前置き
===2018年1月13日追記===
2017年に日本マイクロソフトの公式ブログ、Japan New Era Name Support Blogが開設されました。こちらでマイクロソフト社製品に関する公式な対応方法が更改される予定です。ぜひそちらも参考の上、ご準備ください。
0.前置き
新年あけましておめでとうございます。今年は、1年間で24エントリー書くのが目標です!
さて、さっそく内容に入ります。
年を表現する方法には、日本の場合ですと、西暦と和暦を利用します。
和暦は、「平成」や「昭和」などの元号を用いて表記します。
ここで問題となるのが、平成が終わったら次の元号はどこに誰が定義するのかという話です。
結論から言いますと、Windows 7や、.NET 4以降では、レジストリーで管理されています。
元号に追加が発生した場合は、Windows Updateの更新によって対応されるわけです。
今回のエントリーでは、.NETの元号管理の面からその挙動を確認してみたいと思います。
1..NETでの和暦表示
.NETで和暦表示を行う場合、System.Globalization.JapaneseCalendar クラスを利用します。
例えば、以下のようにして、和暦を出力することができます。
[sourcecode language=”csharp”]
var cultureInfo = new CultureInfo(“ja-jp”)
{
DateTimeFormat = { Calendar = new JapaneseCalendar() }
};
Console.WriteLine(DateTime.Now.ToString(“ggyy年MM月dd日”, cultureInfo));
[/sourcecode]
出力すると以下の通りです。
[sourcecode language=”powershell”]
> 平成25年01月13日
[/sourcecode]
2.レジストリーでの元号管理
前置きに書いた通り、Windows 7以降では、レジストリーに西暦と和暦(元号)の対応が登録されています。
[sourcecode language=”powershell”]
PS HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese> Get-ChildItem
Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese
Name Property
—- ——–
Eras 1868 01 01 : 明治_明_Meiji_M
1912 07 30 : 大正_大_Taisho_T
1926 12 25 : 昭和_昭_Showa_S
1989 01 08 : 平成_平_Heisei_H
[/sourcecode]
JapaneseCalenderもここを参照しているわけです。
なお、このレジストリー値は、元号が追加になった際には、Windows Updateにて対応されます。
テスト等で一時的に元号を増やして確認したい場合は、ここに新しいアイテムを追加します。
(レジストリー値を触る場合は、自己責任で注意して行ってください。間違えると大変です。)
試しに、2013年1月1日から「新元号」という元号を追加してみました。
[sourcecode language=”powershell”]
New-ItemProperty “Eras” “2013 01 01” -value “新元号_新_NEWERA_N”
[/sourcecode]
このアイテムを追加した状態で、先ほどのプログラムを動かすと、以下の出力になります。
[sourcecode language=”powershell”]
> 新元号01年01月13日
[/sourcecode]
3.最後に
意外に簡易な方法で管理されていてびっくりです。
調べる前はどのように管理されているかわからなかったので、独自のユーティリティを作ってしまうところでした…。
それと今回はレジストリー値を触るときに、regeditではなくて、PowerShellを利用しました。
なんでもかんでもPowerShellから触れるのは楽でよいです。PSドライバーの話などは以下のエントリーが詳しいのでぜひ読んでみてください。
GUIユーザーのためのPowerShell入門 28 レジストリ更新コマンドを作る(1)
今回の内容のもと情報はMSDNに記載があります。
こちらのページを参考にしてください。
MSDN:「Era Handling for the Japanese Calendar (Windows)」
コメント