No Programming, No Life

プログラミング関連の話題や雑記

Calendarクラスで週初めをずらす

仕事で直しているシステムを外人さーんが使うことになって、
・月曜日を週初めにしたい!
・指定した日の週初めの日を取得したい!
という要望がありました。


JavaのCalendarクラスで上のような要望に答えるためには、
以下のようにすればいいみたい。

Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);

※Calendar.MONDAYは曜日番号(日=1,月=2,…,土=7)

ということで、週初めを月曜日に設定してあげたのはいいんだが、
軽く調べてみたけど、週初めの日にカレンダーを移動させる
メソッドがあったりするわけじゃないので、仕方なく自力で
以下のようの頑張ってみた。

// 週初めの日までずらす
cal.add(Calendar.DATE, -targetDayOfWeek + cal.getDayOfWeek() + (cal.getDayOfWeek() > targetDayOfWeek ? -7 : 0));

※todayDayOfWeek は 指定した日の曜日番号。
※cal.getDayOfWeek() のほうが、指定した日より大きくなるような場合は、
  先週の話になるので、一週間(7日間)マイナス。