import java.util.Calendar;
import java.util.Date;
public class WeekCounter {
public static int countNaturalWeeks(Date start, Date end) {
Calendar calS = Calendar.getInstance();
calS.setTime(start);
Calendar calE = Calendar.getInstance();
calE.setTime(end);
// 將開始日期調整到下一個周一(若非周一)
if (calS.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calS.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calS.add(Calendar.WEEK_OF_YEAR, 1); // 移至下周一
}
long diffMs = calE.getTimeInMillis() - calS.getTimeInMillis();
if (diffMs < 0) return 0;
// 毫秒轉周,向上取整(結束日為周一也算一周)
return (int) Math.ceil(diffMs / (7.0 * 24 * 60 * 60 * 1000));
}
}
Math.ceil 向上取整,滿足「結束日為周一也算一周」。| 開始 | 結束 | 預期周數 |
|---|---|---|
| 周三 | 下周一 | 1 |
| 周六 | 下周三 | 1 |
| 周一 | 同周五 | 1 |
| 周一 | 兩周後周一 | 3 |