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