今が年の何週目か
ある日がその年の何週目かということについて。
というよりかは、年の1週目っていつよ?ってお話。
まずはISO8601の定義。
- D は曜日を表し、月曜日が 1、日曜日は 7 である。
〜略〜
- ある年における、「最初の木曜日を含む週が、その年の第1週である。」と規定されている。
これはJIS X 0301にも例示されている通り、
- 「第1週は事実上、1月4日を含む週である。」という基準認識に等しい。
- 年初において以下の曜日に該当する場合、その日は新年の曜日としては扱わず、あくまで旧年最終週の曜日として扱う、という事を意味する。
- 1月1日金曜日・1月2日土曜日・1月3日日曜日
曜日は月曜日からで、1/4を含む週が1週目になるとのこと。
で、Javaのドキュメント。
WEEK_OF_YEAR フィールドに対して計算される値の範囲は、1 から 53 です。年の第 1 週は、その年から少なくとも getMinimalDaysInFirstWeek() 日を含む getFirstDayOfWeek() で始まるもっとも早い 7 日間です。このように第 1 週は getMinimalDaysInFirstWeek()、getFirstDayOfWeek() の値、および 1 月 1 日の曜日により変化します。ある年の第 1 週から翌年の第 1 週までの週は、必要に応じて 2 から 52 または 53 まで順に番号が付けられます。
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/GregorianCalendar.html
とうわけで、このようにする必要がある?
Calendar calendar = new GregorianCalendar(); calendar.setMinimalDaysInFirstWeek(4); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.set(2010, Calendar.JANUARY, 1); System.out.println(calendar.get(Calendar.WEEK_OF_YEAR)); →53
めんどくさい・・・