我有一个使用以下Java 8 LocalDate API计算的基于ISO的周号
int weekNumOfYear = LocalDate#get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
给定年份和星期数(例如,201927),如何计算本周(201917)的开始日期和结束日期?
我正在使用Calendar
类解决此问题,但不确定它是否正确(尤其是是否遵循ISO格式)
Update: The following code doesn't work correctly for 201953, there is no 53th week for 2019
@Test
public void testGetWeekDays() {
Integer year = 2019;
Integer week = 27;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
//Use ISO format
cal.setMinimalDaysInFirstWeek(4);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, week);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
String beginDate = sdf.format(cal.getTime());
cal.add(Calendar.DAY_OF_WEEK, 6);
String endDate = sdf.format(cal.getTime());
System.out.println(beginDate);
System.out.println(endDate);
}
分析解答
您还可以使用with
获取星期的开始日期和结束日期
System.out.println(localDate.with(DayOfWeek.MONDAY));
System.out.println(localDate.with(DayOfWeek.SUNDAY));
如果要从星期数获取开始日期和结束日期,请使用ISO_WEEK_DATE
LocalDate startDay = LocalDate.parse("2019-W26-1", DateTimeFormatter.ISO_WEEK_DATE);
LocalDate endDay = LocalDate.parse("2019-W26-7", DateTimeFormatter.ISO_WEEK_DATE);
One digit for the day-of-week. The value run from Monday (1) to Sunday (7).