Java日历类Calendar 默认是从星期天开始算作本周的第一天, 所以网上很多都是直接获取本周的第二天Calendar.MONDAY来当做本周的第一天,但是实际上有个很严重的问题就是周天的时候去获取本周的第一天实际上是获取到了下一周的周一从而导致周天的数据并没有统计到.
错误示例如下:
解决也很简单,就是如果是周天就往前减一周
获取本周第一天正确代码:
/**
* 获取本周的第一天 00:00:00
* @return
*/
public static Date currentWeekFirstDay() {
Calendar cal = Calendar.getInstance();
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
if (Calendar.SUNDAY == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);//星期天向前减一天即得到上一周
}
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);
return cal.getTime();
}
获取本周的最后一天:
/**
* 获取本周的周日最后一秒时间节点 23:59:59
* @return
*/
public static Date currentWeekLastDay() {
Calendar cal = Calendar.getInstance();
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
if (Calendar.SUNDAY == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);//最后一天周六
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.add(Calendar.DAY_OF_WEEK, 1);//加一天得到周天
return cal.getTime();
}