java周查詢和mysql的yearWeek同步

需求要實現按周統計某個數量,本來以爲調用mysql的week和java裏calendar.get(Calendar.WEEK_OF_YEAR)就行了,結果發現對應不上,而且還有蛋疼的跨年問題,上一年的年末幾日和這一年的開頭幾日可能屬於同一周,而且根據天數分佈這周可能歸屬於上一年也可能歸屬於下一年。mysql還好,有yearWeek方法,而java根本沒有類似的方法calendar.get(Calendar.WEEK_OF_YEAR)根本沒有包含年份信息,這一點也是比較奇怪,因爲單獨使用calendar.get(Calendar.WEEK_OF_YEAR)沒什麼意義。

我絕對參考百度上的日曆,以星期一作爲一週的開始

mysql使用yearweek(date,1)就行了

java則麻煩一點需要寫個方法

    public static Integer getYearWeek(Date date) {
    	Calendar calendar = Calendar.getInstance();
    	calendar.setTime(date);
    	return getYearWeek(calendar);
    }
    public static Integer getYearWeek(Calendar calendar) {
    	calendar.setFirstDayOfWeek(Calendar.MONDAY);
    	calendar.setMinimalDaysInFirstWeek(4);
    	int week = calendar.get(Calendar.WEEK_OF_YEAR);
    	int year = calendar.get(Calendar.YEAR);
    	calendar.add(Calendar.DATE, -7);//獲得上一週的週數
    	int lastWeek = calendar.get(Calendar.WEEK_OF_YEAR);
    	int lastYear = calendar.get(Calendar.YEAR);
    	if(week < lastWeek && year == lastYear) {//週數小於上一週,年數不變說明時間在年末,但是週數已經算到明年,年數需要+1
    		year += 1;
    	}
    	if(week > lastWeek && year > lastYear && lastWeek != 1) {//週數大於上週,年數也大於上週,並且上週不等於1,說明時間在新年的一月,但是週數還是去年的,年數需要-1
    		year -= 1;
    	}
    	return year * 100 + week;
    }

經過測試得出的值是一致的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章