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