首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 計算時間區間內自然周數:按週末劃分不扣除節假日

     編輯:程式設計綜合問答

需求澄清

「自然周」指按日曆週(周一至周日或周日至周六)劃分,**不扣除節假日/周末**,僅計算有多少個週跨度。

算法

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 可能屬於下一年第一周);
  • 業務若需「工作周數」,需引入節假日日曆表逐日判斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved