実現したいこと
JavaのGregorianCalendarが暦週の基準年にそって繰り下がるのを確認したい。
該当のソースコード
Java
1 // YYYY表記 2 SimpleDateFormat YYYY = new SimpleDateFormat("YYYY年MM月dd日 E曜日"); 3 4 // 年が繰り上がる場合 5 Calendar calDownerYYYY11 = new GregorianCalendar(); 6 calDownerYYYY11.set(1997, 11, 31); 7 String dateDownerYYYY11 = YYYY.format(calDownerYYYY11.getTime()); 8 int weekOfYearDownerYYYY11 = calDownerYYYY11.get(Calendar.WEEK_OF_YEAR); 9 10 // 年が繰り下がる場合 11 Calendar calDownerYYYY01 = new GregorianCalendar(); 12 calDownerYYYY01.setFirstDayOfWeek(Calendar.SUNDAY); 13 calDownerYYYY01.setMinimalDaysInFirstWeek(4); 14 calDownerYYYY01.set(1998, 0, 1); 15 String dateDownerYYYY01 = YYYY.format(calDownerYYYY01.getTime()); 16 int weekOfYearDownerYYYY01 = calDownerYYYY01.get(Calendar.WEEK_OF_YEAR); 17 18 System.out.println("週の最初の曜日:" + calDownerYYYY11.getFirstDayOfWeek()); 19 System.out.println("何日以上あると最初の週と見做すか:" + calDownerYYYY11.getMinimalDaysInFirstWeek()); 20 System.out.println("日付:" + dateDownerYYYY11 + "/第何週:" + weekOfYearDownerYYYY11); 21 System.out.println("週の最初の曜日:" + calDownerYYYY01.getFirstDayOfWeek()); 22 System.out.println("何日以上あると最初の週と見做すか:" + calDownerYYYY01.getMinimalDaysInFirstWeek()); 23 System.out.println("日付:" + dateDownerYYYY01 + "/第何週:" + weekOfYearDownerYYYY01);
console
1週の最初の曜日:1 2何日以上あると最初の週と見做すか:1 3日付:1998年12月31日 水曜日/第何週:1 4週の最初の曜日:1 5何日以上あると最初の週と見做すか:4 6日付:1998年01月01日 木曜日/第何週:53
直観的にはconsoleの日付:1998年12月31日
は日付:1997年12月31日
と表示したいところです。
しかし、GregorianCalendar的には日付:1997年12月28日
から1998年なため、console通り表示されます。
これはJavaの仕様通りであり、私の期待通りです。
これと同様に、私の期待では、consoleの日付:1998年01月01日
は日付:1997年01月01日
と表示されるはずです。
なぜなら、GregorianCalendar的には日付:1998年01月01日
はまだ1997年なはずだからです。
しかし、これは私の期待通りにはなりません。
私の期待は間違っていますか?
また、暦週の基準年にそって期待通りに繰り下がらせたい場合、どのようにすれば良いですか?
補足情報(環境)
- 言語
Java8
- 開発環境
Spring Tool Suite 4 Version: 4.2.2.RELEASE
回答2件
あなたの回答
tips
プレビュー