どこまで元号が正しく使えるかチェック!


では、この元号はどこまで正しく表示されるのでしょう。実際に試してみることにしましょう。今日の日付をCalendarで作成し、10年ずつ昔に戻しながら表示を確認してみます。

public static void main(String[] args) {
  Locale.setDefault(new Locale("ja","JP","JP"));
  Calendar cal = Calendar.getInstance();
  SimpleDateFormat format =
      new SimpleDateFormat("GGGGyyyy-M-d");
  System.out.println("今日:" + format.format(cal.getTime()));
  for(int i = 1;i <= 15;i++){
    cal.add(Calendar.YEAR, -10);
      System.out.println("" + (10 * i) + "年前:"
          + format.format(cal.getTime()));
  }
}

今日から10年毎に日にちをさかのぼってみる。


これでチェックすると、「平成」「昭和」「大正」「明治」まではきちんと表示されることがわかります。明治より前は「西暦」になってしまいます。ということは、和暦での元号表示は、明治以降しか対応していないということになりますね。

まぁ、考えてみれば、日本が太陰暦から太陽暦に移行したのは1873年(明治6年)からですから、それ以前の日付は太陽暦の西暦とは異なる暦だったわけで、年数だけを元号に変えてもあまり意味はない、といえるかもしれません。

続いて、「元号がわかる切り替わりの日」についてもチェックしてみましょう。明治・大正・昭和・平成は、それぞれ以下の日から切り替わっています。

明治:1868年9月8日から
大正:1912年7月30日から
昭和:1926年12月25日から
平成:1989年1月8日から

日本の元号は、切り替わる年に2つの元号が入り混じった形となります。例えば、平成は1989年1月8日から始まりますが、この年(1989年)は、1月1日~7日までが「昭和64年」となり、1月8日~12月31日までが「平成元年」となるわけです。つまり、1989年は、「何月何日か」によって、昭和64年か平成元年か決まることになります。

では、これらの切り替わりの月日が正しく認識できるか試してみましょう。ここでは切り替わりの前日と当日の日付を和暦にして表示させ、元号が変わっているかチェックしてみます。

public static void main(String[] args) {
  int[][] data = new int[][]{{1868,8,7},{1912,6,29},
      {1926,11,24},{1989,0,7}};
  Locale locale = new Locale("ja","JP","JP");
  Calendar cal = Calendar.getInstance();
  Locale.setDefault(locale);
  SimpleDateFormat format1 =
      new SimpleDateFormat("GGGGyyyy-M-d",locale);
  SimpleDateFormat format2 =
      new SimpleDateFormat("GGGGyyyy-M-d",Locale.JAPAN);
  for(int[] arr:data){
    cal.set(arr[0],arr[1],arr[2]);
    System.out.println(format1.format(cal.getTime())
        + "(" + format2.format(cal.getTime()) + ")");
    cal.add(Calendar.DATE, 1);
    System.out.println(format1.format(cal.getTime())
        + "(" + format2.format(cal.getTime()) + ")");
  }
}

各元号の開始日前日と当日をチェックする。


実行してみると……一部、正しく表示されない部分があることがわかりました。明治元年は、どうやら9月8日以前も「明治元年」として認識されるようです。また1926年12月25日も昭和ではなく大正として表示されてしまいました。これってひょっとしたら……バグですか??