获取每周的字符串
public static List<String> getLastNWeeks(int numberOfWeeks) {
List<String> weeksList = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
for (int i = 0; i < numberOfWeeks; i++) {
int year = calendar.get(Calendar.YEAR);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
weeksList.add(year + "-" + weekOfYear);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
}
return weeksList;
}
获取最近N周的周一到周日的起始终止时间
public static List<DateRange> getLastWeeksDateRanges(int weeks) {
List<DateRange> dateRanges = new ArrayList<>();
ZoneId zoneId = ZoneId.of("GMT+8");
for (int i = 1; i <= weeks; i++) {
LocalDateTime startOfWeek = LocalDateTime.now(zoneId)
.minusWeeks(i)
.with(DayOfWeek.MONDAY)
.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
ZonedDateTime zonedStartOfWeek = startOfWeek.atZone(zoneId);
LocalDateTime endOfWeek = startOfWeek
.with(DayOfWeek.SUNDAY)
.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999999999);
ZonedDateTime zonedEndOfWeek = endOfWeek.atZone(zoneId);
DateRange dateRange = new DateRange();
dateRange.setDateFrom(Date.from(zonedStartOfWeek.toInstant()));
dateRange.setDateTo(Date.from(zonedEndOfWeek.toInstant()));
dateRanges.add(dateRange);
}
return dateRanges;
}
public class DateRange {
private Date dateFrom;
private Date dateTo;
}
按照ISO-8601标准计算周数的方法 获取最近几周
public static List<String> getLastNWeeks(int numberOfWeeks) {
List<String> weeksList = new ArrayList<>();
Calendar calendar = Calendar.getInstance(Locale.getDefault());
// 设定每周开始的第一天为周一,这符合ISO 8601标准
calendar.setFirstDayOfWeek(Calendar.MONDAY);
// 设定周的最小天数为4,这符合ISO 8601标准
calendar.setMinimalDaysInFirstWeek(4);
// 获取本周的周日(即本周末)
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.add(Calendar.DAY_OF_MONTH, -1); // 移动到上周的周末,因为我们想要包含完整的上一周
for (int i = 0; i < numberOfWeeks; i++) {
// 获取当前日期的年份
int year = calendar.getWeekYear(); // 使用 getWeekYear 代替 get(Calendar.YEAR)
// 获取当前日期所在的周数
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
// 以ISO格式添加年份和周数
weeksList.add(year + "-" + weekOfYear);
// 向前移动到下一周的周日
calendar.add(Calendar.WEEK_OF_YEAR, -1);
}
return weeksList;
}