私は簡単な問題に遭遇し、それを解決しました (あきらめませんでした)。ただし、もっときちんとしたトリッキーな解決策があると思います。問題は次のとおりです。今日の最後の X 日前の日付を返します。たとえば、今日が 2013 年 7 月 9 日火曜日で、最後の金曜日が必要な場合、答えは 2013 年 7 月 5 日金曜日になります。
私の解決策は次のとおりです。
public Date dateOfLast(int day) {
int today = calendar.get(Calendar.DAY_OF_WEEK);
int daysDifferences = today - day;
int daysToSubtract;
if (day < today) {
//last day seems to be in current week !
//for example Fr > Tu.
daysToSubtract = -(Math.abs(daysDifferences));
} else {
//7- ( difference between days )!
//last day seems to be in the previous,thus we subtract the the days differences from 7
// and subtract the result from days of month.
daysToSubtract = -(7 - Math.abs(daysDifferences));
}
//subtract from days of month.
calendar.add(Calendar.DAY_OF_MONTH, daysToSubtract);
return calendar.getTime();
}
もしあれば、誰かが私に数式またはより簡単な解決策を教えてくれますか?