Java BUG1:獲取本週第一天即得到週一的日期

BUG 獲取週一的日期,週日獲取到的是下週的週一

強調:以週一爲一星期的第一天!!!

問題描述:開發過程中需要使用日期相關的函數,有些功能需要自行開發,爲了趕時間於是在網上找到現成的代碼,起初沒什麼問題,到了星期天突然發現數據不對,仔細排查,發現BUG,週日獲取到的週一日期不是本週而是下週的。

含有BUG的代碼(來源爲網絡):2020-3-22 週日 本週的週一爲2020-3-16

//System.out.println(getWeekStartDate())
//Mon Mar 23 00:00:00 CST 2020
public static Date getWeekStartDate(){
	Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    Date date = cal.getTime();
    return date;
}

//System.out.println(getNowWeekBegin())
//2020年3月23日 00:00:00
public static String getNowWeekBegin() {
	int mondayPlus;
    Calendar cd = Calendar.getInstance();
    int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; 
    if (dayOfWeek == 1) {
    	mondayPlus = 0;
    } else {
        mondayPlus = 1 - dayOfWeek;
    }
    GregorianCalendar currentDate = new GregorianCalendar();
    currentDate.add(GregorianCalendar.DATE, mondayPlus);
    Date monday = currentDate.getTime();
    DateFormat df = DateFormat.getDateInstance();
    String preMonday = df.format(monday);
    return preMonday + " 00:00:00";
}

//System.out.println(getWeekStart())
//2020-03-23
public static String getWeekStart(){
	Calendar cal=Calendar.getInstance();
    cal.add(Calendar.WEEK_OF_MONTH, 0);
    cal.set(Calendar.DAY_OF_WEEK, 2);
    Date time=cal.getTime();
    return new SimpleDateFormat("yyyy-MM-dd").format(time);
}

修正後的代碼:

    /**
     * 獲取本週的第一天
     * @return String
     * **/
    public static String getWeekStartCorrect(){
        int num;
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek == 1) {
            num = 0;
        } else if (dayOfWeek == 0){
            num = -6;
        }else {
            num = 1 - dayOfWeek;
        }
        calendar.add(Calendar.DATE, num);
        Date monday = calendar.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(monday);
    }
    //System.out.println(getWeekStartCorrect());
    //2020-03-16
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章