Calendar API を使用したアプローチの 1 つを次に示します。
private static final Calendar START_CAL = createAugust26th2012Cal();
public int getWeekNumber(Calendar someCal) {
int theWeek = someCal.get(Calendar.WEEK_OF_YEAR);
int weekCount = 0;
while (theWeek != START_CAL.get(Calendar.WEEK_OF_YEAR)) {
someCal.add(Calendar.WEEK_OF_YEAR, -1);
theWeek = someCal.get(Calendar.WEEK_OF_YEAR);
weekCount++;
}
return weekCount;
}
または、2 つのカレンダー間の差分 (ミリ秒単位) を取得し、その結果を 1 週間のミリ秒数で割ることもできます。
このアプローチを使用する場合は、TimeZones と夏時間を考慮することを忘れないでください。
DST を補正するためのコードがどのように見えるか正確には思い出せませんが、次のようなものだと思います:
(オフセットを 2 つのオペランドに加算するか減算するかはよく覚えていません)
private static final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;
public int getWeeksBetween(Calendar calOne, Calendar calTwo) {
long millisOne = calOne.getTime().getTime();
long millisTwo = calTwo.getTime().getTime();
long offsetOne = calOne.getTimeZone().getOffset(millisOne);
long offsetTwo = calTwo.getTimeZone().getOffset(millisTwo);
long diff = (millisTwo - offsetTwo) - (millisOne + offsetOne );
return diff / ONE_WEEK_MILLIS;
}