工具类
public static List<String> getWeekStartAndEnd(String startTimStamp, String endTimStamp) {
try {
List<String> datas = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startTime = sdf.parse(startTimStamp);
Date endTime = sdf.parse(endTimStamp);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(startTime);
int startYear = cal1.get(Calendar.YEAR);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(endTime);
int endYear = cal2.get(Calendar.YEAR);
int startWeekNo = getWeekOfYear(startTime);
int endWeekNo = getWeekOfYear(endTime);
if(startYear == endYear) {
if(startWeekNo != endWeekNo) {
while(startWeekNo <= endWeekNo) {
String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
datas.add(getTimeStampPattern2(startStr, endStr));
startWeekNo++;
}
}else {
String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
datas.add(getTimeStampPattern2(startStr, endStr));
}
}else {
int startWeekTotal = getMaxWeekNumOfYear(startYear);
if(startWeekNo != startWeekTotal) {
while(startWeekNo < startWeekTotal) {
String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
datas.add(getTimeStampPattern2(startStr, endStr));
startWeekNo++;
}
}else {
String startStr = getStartDayOfWeekNo(startYear, startWeekNo);
String endStr = getEndDayOfWeekNo(startYear, startWeekNo);
datas.add(getTimeStampPattern2(startStr, endStr));
}
if(endWeekNo == startWeekTotal && cal2.get(Calendar.MONTH) == 0) {
}else {
int endWeekTotal = 1;
if(endWeekTotal != endWeekNo) {
while(endWeekTotal <= endWeekNo) {
String startStr = getStartDayOfWeekNo(endYear, endWeekTotal);
String endStr = getEndDayOfWeekNo(endYear, endWeekTotal);
datas.add(getTimeStampPattern2(startStr, endStr));
endWeekTotal++;
}
}else {
String startStr = getStartDayOfWeekNo(endYear, endWeekTotal);
String endStr = getEndDayOfWeekNo(endYear, endWeekTotal);
datas.add(getTimeStampPattern2(startStr, endStr));
}
}
}
return datas;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static int getMaxWeekNumOfYear(int year) {
Calendar c = new GregorianCalendar();
c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
return getWeekOfYear(c.getTime());
}
public static int getWeekOfYear(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}
private static Calendar getCalendarFormYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
return cal;
}
public static String getEndDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setMinimalDaysInFirstWeek(7);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
cal.add(Calendar.DAY_OF_WEEK, 6);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = cal.getTime();
String endDateString = sdf.format(endDate);
return endDateString;
}
public static String getStartDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setMinimalDaysInFirstWeek(7);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = cal.getTime();
String startDateString = sdf.format(startDate);
return startDateString;
}
public static String getTimeStampPattern2(String startStr, String endStr){
return startStr + " ~ " + endStr;
}
public static void main(String[] args) {
getWeekStartAndEnd("2021-01-04", "2021-03-04");
}