「自然周」指按日曆週(周一至周日或周日至周六)劃分,**不扣除節假日/周末**,僅計算有多少個週跨度。
public int countWeeks(Date start, Date end) {
Calendar cal = Calendar.getInstance();
cal.setTime(start);
int startWeek = cal.get(Calendar.WEEK_OF_YEAR);
int startYear = cal.get(Calendar.YEAR);
cal.setTime(end);
int endWeek = cal.get(Calendar.WEEK_OF_YEAR);
int endYear = cal.get(Calendar.YEAR);
if (startYear == endYear) {
return endWeek - startWeek + 1;
}
// 跨年:累加中間完整年份的週數
int weeks = 0;
for (int y = startYear; y <= endYear; y++) {
cal.set(y, Calendar.DECEMBER, 31);
int maxWeek = cal.get(Calendar.WEEK_OF_YEAR);
if (y == startYear) weeks += maxWeek - startWeek + 1;
else if (y == endYear) weeks += endWeek;
else weeks += maxWeek;
}
return weeks;
}
long diffDays = (end.getTime() - start.getTime()) / (1000*60*60*24);
int weeks = (int)Math.ceil((diffDays + 1) / 7.0); // 含首尾不足一週算一週
WEEK_OF_YEAR 歸屬(如 12/31 可能屬於下一年第一周);