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