元号切り替わり日の「謎」
いろいろ調べたところ、開始の配列を以下のように修正すると正しく切り替わりが表示されることがわかりました。
int[][] data = new int[][]{{1867,11,31},{1912,6,29},
{1926,11,25},{1989,0,7}};
これによると、明治は1868年1月1日から、昭和は1926年12月26日から表示されるようになっているようです。――このうち、明治に関しては、これはやむを得ない面があります。先に述べたように、明治6年に太陽暦に切り替わるまで、日本では太陰暦が使われてきました。このことを考えると、太陰暦の時代の年月日は当てにならないといってよいでしょう。
元号切り替わりの日を探し当てた状態。 |
ただし、昭和への切り替わりについては、どうもバグのように思えてしまいますが……。いろいろ調べてみたところ、大正15年12月25日という日は、「改元の詔書」によると存在することになっているようです。要するに、この年の12月25日は、「大正15年」としても「昭和元年」としても誤りではないようです。(同様に、1912年7月30日も、「明治45年」と「大正元年」の両方が存在するようです)
ただ、コンピュータの世界では「どっちでもOK」というのは少々困ります。世間では昭和は12月25日から始まるというのが一般的な認識ですから、これはバグといってよいのではないでしょうか。Sun Microsystemsの正式な見解を伺いたいところですね。
最後に少々Javaとは違うところに脱線してしまいましたが、元号というのは正確にあつかおうとするとなかなか大変なんだな、ということを改めて実感してしまいました。ともあれ、私たちが普段よく使うことになる昭和・平成時代については問題なく使えますから、これからは「元号のためにJava 6にバージョンアップ」という人が続出する……かも知れませんね!