Mar 31, 2006
[Mustang] JapaneseImperialCalendar にチャレンジ
Mustang では遂に和暦がサポートされるらしい!!
![]()
JavaWorld 2006/05 を貰ったので何となく眺めていたら、とある記事で紹介されていた。
java.util.Calendar の実装クラスがパッケージプライベートなので API Document を眺めていても全く気付いていなかった。
Calendar の和暦サポートは Mustang でも流れたとばかり思っていた。
JavaWorld は久しぶりに開いたけれど、軽くでも毎月目を通すべきかもしれないな。
JavaWorld の記事中でも紹介されていた JapaneseImperialCalendar の紹介ページは↓
- Java SE 6 Mustang じゃじゃ馬ならし 官公庁向けでも大丈夫 - 和暦
- http://www.javainthebox.net/laboratory/JavaSE6/imperialcalendar/imperialcalendar.html
サンプルコード
package jp.in_vitro.codelets.util;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Codelet {
private Date date = new Date(System.currentTimeMillis());
public Codelet() {
super();
}
public static void main(final String[] args) {
Codelet me = new Codelet();
me.execute00();
me.execute01();
me.execute02();
me.execute03();
}
protected void execute00() {
Locale locale = new Locale("ja", "JP");
Calendar cal = Calendar.getInstance(locale);
System.out
.println("0*************************************************************");
System.out.println("Default Locale : " + Locale.getDefault());
System.out.println("Calendar#getInstance : " + locale);
System.out.println();
System.out.println("" + cal);
DateFormat format0 = new SimpleDateFormat("GGGGyy年MMMMdd日");
System.out.println("GGGGyy年MMMMdd日 : " + format0.format(this.date));
DateFormat format1 = new SimpleDateFormat("GGGyy年MMMMdd日");
System.out.println("GGGyy年MMMMdd日 : " + format1.format(this.date));
DateFormat format2 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGGyy/MM/dd : " + format2.format(this.date));
DateFormat format3 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGyy/MM/dd : " + format3.format(this.date));
System.out.println();
}
protected void execute01() {
Locale locale = new Locale("ja", "JP", "JP");
Calendar cal = Calendar.getInstance(locale);
System.out
.println("1*************************************************************");
System.out.println("Default Locale : " + Locale.getDefault());
System.out.println("Calendar#getInstance : " + locale);
System.out.println();
System.out.println("" + cal);
DateFormat format0 = new SimpleDateFormat("GGGGyy年MMMMdd日");
System.out.println("GGGGyy年MMMMdd日 : " + format0.format(this.date));
DateFormat format1 = new SimpleDateFormat("GGGyy年MMMMdd日");
System.out.println("GGGyy年MMMMdd日 : " + format1.format(this.date));
DateFormat format2 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGGyy/MM/dd : " + format2.format(this.date));
DateFormat format3 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGyy/MM/dd : " + format3.format(this.date));
System.out.println();
}
protected void execute02() {
Locale.setDefault(new Locale("ja", "JP"));
Calendar cal = Calendar.getInstance();
System.out
.println("2*************************************************************");
System.out.println("Default Locale : " + Locale.getDefault());
System.out.println("Calendar#getInstance : null");
System.out.println();
System.out.println("" + cal);
DateFormat format0 = new SimpleDateFormat("GGGGyy年MMMMdd日");
System.out.println("GGGGyy年MMMMdd日 : " + format0.format(this.date));
DateFormat format1 = new SimpleDateFormat("GGGyy年MMMMdd日");
System.out.println("GGGyy年MMMMdd日 : " + format1.format(this.date));
DateFormat format2 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGGyy/MM/dd : " + format2.format(this.date));
DateFormat format3 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGyy/MM/dd : " + format3.format(this.date));
System.out.println();
}
protected void execute03() {
Locale.setDefault(new Locale("ja", "JP", "JP"));
Calendar cal = Calendar.getInstance();
System.out
.println("3*************************************************************");
System.out.println("Default Locale : " + Locale.getDefault());
System.out.println("Calendar#getInstance : null");
System.out.println();
System.out.println("" + cal);
DateFormat format0 = new SimpleDateFormat("GGGGyy年MMMMdd日");
System.out.println("GGGGyy年MMMMdd日 : " + format0.format(this.date));
DateFormat format1 = new SimpleDateFormat("GGGyy年MMMMdd日");
System.out.println("GGGyy年MMMMdd日 : " + format1.format(this.date));
DateFormat format2 = new SimpleDateFormat("GGGGyy/MM/dd");
System.out.println("GGGGyy/MM/dd : " + format2.format(this.date));
DateFormat format3 = new SimpleDateFormat("GGGyy/MM/dd");
System.out.println("GGGyy/MM/dd : " + format3.format(this.date));
System.out.println();
}
}
実行結果
0, 2, 3 の結果は理解できる。 1 は何故こうなるのだろう?? バグなのか仕様なのか・・・。 Mustang が正式にリリースされたら試してみるか。
0************************************************************* Default Locale : ja_JP Calendar#getInstance : ja_JP java.util.GregorianCalendar[time=1143914626604,areFieldsSet=true,areAllFieldsSet =true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=324000 00,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1 ,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=3,WEEK_OF_YEAR=14,WEEK_OF_MONTH= 2,DAY_OF_MONTH=2,DAY_OF_YEAR=92,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOU R=3,HOUR_OF_DAY=3,MINUTE=3,SECOND=46,MILLISECOND=604,ZONE_OFFSET=32400000,DST_OF FSET=0] GGGGyy年MMMMdd日 : 西暦06年4月02日 GGGyy年MMMMdd日 : 西暦06年4月02日 GGGGyy/MM/dd : 西暦06/04/02 GGGyy/MM/dd : 西暦06/04/02 1************************************************************* Default Locale : ja_JP Calendar#getInstance : ja_JP_JP java.util.JapaneseImperialCalendar[time=1143914626664,areFieldsSet=true,areAllFi eldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset =32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayO fWeek=1,minimalDaysInFirstWeek=1,ERA=4,YEAR=18,MONTH=3,WEEK_OF_YEAR=14,WEEK_OF_M ONTH=2,DAY_OF_MONTH=2,DAY_OF_YEAR=92,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM= 0,HOUR=3,HOUR_OF_DAY=3,MINUTE=3,SECOND=46,MILLISECOND=664,ZONE_OFFSET=32400000,D ST_OFFSET=0] GGGGyy年MMMMdd日 : 西暦06年4月02日 GGGyy年MMMMdd日 : 西暦06年4月02日 GGGGyy/MM/dd : 西暦06/04/02 GGGyy/MM/dd : 西暦06/04/02 2************************************************************* Default Locale : ja_JP Calendar#getInstance : null java.util.GregorianCalendar[time=1143914626664,areFieldsSet=true,areAllFieldsSet =true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=324000 00,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1 ,minimalDaysInFirstWeek=1,ERA=1,YEAR=2006,MONTH=3,WEEK_OF_YEAR=14,WEEK_OF_MONTH= 2,DAY_OF_MONTH=2,DAY_OF_YEAR=92,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOU R=3,HOUR_OF_DAY=3,MINUTE=3,SECOND=46,MILLISECOND=664,ZONE_OFFSET=32400000,DST_OF FSET=0] GGGGyy年MMMMdd日 : 西暦06年4月02日 GGGyy年MMMMdd日 : 西暦06年4月02日 GGGGyy/MM/dd : 西暦06/04/02 GGGyy/MM/dd : 西暦06/04/02 3************************************************************* Default Locale : ja_JP_JP Calendar#getInstance : null java.util.JapaneseImperialCalendar[time=1143914626664,areFieldsSet=true,areAllFi eldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset =32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayO fWeek=1,minimalDaysInFirstWeek=1,ERA=4,YEAR=18,MONTH=3,WEEK_OF_YEAR=14,WEEK_OF_M ONTH=2,DAY_OF_MONTH=2,DAY_OF_YEAR=92,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM= 0,HOUR=3,HOUR_OF_DAY=3,MINUTE=3,SECOND=46,MILLISECOND=664,ZONE_OFFSET=32400000,D ST_OFFSET=0] GGGGyy年MMMMdd日 : 平成18年4月02日 GGGyy年MMMMdd日 : H18年4月02日 GGGGyy/MM/dd : 平成18/04/02 GGGyy/MM/dd : H18/04/02



