另一个答案增加了一周,但方式不同:
我假设您总是想要一个日历周的开始日期和结束日期。您可以编写一个返回 a 的方法,Map.Entry<LocalDate, LocalDate>
其中键是开始日期,值是结束日期。
它可能看起来像这样:
public static Map.Entry<LocalDate, LocalDate> getStartAndEndOfCalendarWeek(String calendarWeek) {
DateTimeFormatter startOfWeekFormatter = new DateTimeFormatterBuilder()
.appendPattern("ww/YY")
.parseDefaulting(WeekFields.ISO.dayOfWeek(), 1)
.toFormatter();
LocalDate weekStart = LocalDate.parse(calendarWeek, startOfWeekFormatter);
LocalDate weekEnd = weekStart.plusWeeks(1);
return new AbstractMap.SimpleEntry<LocalDate, LocalDate>(weekStart, weekEnd);
}
像这样main
用你的例子打印结果String
public static void main(String[] args) {
String cw = "35/19";
Map.Entry<LocalDate, LocalDate> calendarWeekStartAndEndDate
= getStartAndEndOfCalendarWeek(cw);
System.out.println(calendarWeekStartAndEndDate.getKey()
+ " - " + calendarWeekStartAndEndDate.getValue());
}
会输出
2019-08-26 - 2019-09-02
DateTimeFormatter
我知道这会为使用 your解析的结果增加一周String
,但我认为涉及两个不同的解析器或解析操作不会比增加一周带来任何好处。
如果您想要连续两个日历周的开始,则添加一个额外的 day,如下所示:
LocalDate weekEnd = weekStart.plusWeeks(1).plusDays(1);
如果你想要 a LocalDateTime
(如果你真的这样做的话,我不太清楚),你当然可以调整返回类型并.atStartOfDay()
在解析时使用weekStart
,加法将保持不变。