封装数据的实体类
@Data
public class DateRange {
// 周数
private int week;
// 当前周开始日期
private Date startDate;
// 当前周结束日期
private Date endDate;
}
这里用了lombok,pom文件如下
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
操作代码
// 根据年份获取所有周次及每周的开始-结束日期
private static List<DateRange> getWeeksDetByYear(int pvnYear) throws ParseException {
List<DateRange> list = new ArrayList<>();
Calendar lvCal = Calendar.getInstance();
lvCal.setFirstDayOfWeek(Calendar.MONDAY);
Date lvDt = deformatDatetime(String.valueOf(pvnYear) + "-01-01 00:00:00", null);
lvCal.setTime(lvDt);
int lvWeek = 1;
while (true) {
lvCal.set(Calendar.DAY_OF_WEEK, lvCal.getFirstDayOfWeek()); // Monday
Date lvFirstDt = lvCal.getTime();
if (lvFirstDt.getYear() + 1900 < pvnYear) {
lvFirstDt = lvDt;
}
if (lvFirstDt.getYear() + 1900 > pvnYear) break;
lvCal.set(Calendar.DAY_OF_WEEK, lvCal.getFirstDayOfWeek() + 6); // Sunday?
Date lvLastDt = lvCal.getTime();
if (lvLastDt.getYear() + 1900 > pvnYear) {
lvLastDt = deformatDatetime(String.valueOf(pvnYear + 1) + "-01-01 00:00:00", null);
lvCal.setTime(lvLastDt);
lvCal.add(Calendar.DAY_OF_YEAR, -1);
lvLastDt = lvCal.getTime();
}
DateRange dateRange = new DateRange();
dateRange.setWeek(lvWeek);
dateRange.setStartDate(lvFirstDt);
dateRange.setEndDate(lvLastDt);
list.add(dateRange);
lvWeek++;
lvCal.add(Calendar.WEEK_OF_YEAR, 1);
}
return list;
}
时间跟字符串相互转换
// string转datetime格式
private static Date deformatDatetime(String strDate, String fmt) throws ParseException {
if (fmt == null) {
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
java.util.Locale.ENGLISH)).parse(strDate);
} else {
return (new SimpleDateFormat(fmt, java.util.Locale.ENGLISH))
.parse(strDate);
}
}
// datetime转string格式
private static String datetimeToString(Date dt, String fmt) {
if (fmt == null) {
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
java.util.Locale.ENGLISH)).format(dt);
} else {
return (new SimpleDateFormat(fmt, java.util.Locale.ENGLISH))
.format(dt);
}
}
测试类
public static void main(String[] args) throws ParseException {
// 输入指定的年
List<DateRange> weeksDetByYear = getWeeksDetByYear(2018);
// 输出数据
for (DateRange dateRange : weeksDetByYear) {
System.out.println(String.format("Week: %d, %s - %s", dateRange.getWeek(),
datetimeToString(dateRange.getStartDate(), "yyyy-MM-dd"),
datetimeToString(dateRange.getEndDate(), "yyyy-MM-dd")));
}
}
数据结果
截取了一部分数据