我的问题陈述-
我的约会看起来像这样= LocalDate - 20180923

我需要编写一个需要3个输入的函数-
日期(2018-09-23),
offset(1)=>表示我们需要找到上周的最后一个星期六,
day(SATURDAY)=>表示我们需要查找星期六。

因此,在这种情况下,如果我调用函数getLastWeekDateForDay("20180923", 1, "SATURDAY") =>,则应该返回字符串"20180922"

另一个例子 -
getLastWeekDateForDay("20180923", 2, "FRIDAY") => "20180914"

我不知道如何解决这个问题。

最佳答案

对于这样的事情,您可以使用TemporalAdjusters,如下所示:

public static String getLastWeekDateForDay(String date, int offset, DayOfWeek dayOfWeek) {
    return LocalDate.parse(date, DateTimeFormatter.BASIC_ISO_DATE)
                    .with(TemporalAdjusters.nextOrSame(dayOfWeek))
                    .minusWeeks(offset)
                    .format(DateTimeFormatter.BASIC_ISO_DATE);
}


如果dayOfWeekString,请使用DayOfWeek.valueOf(String name)

测试

System.out.println(getLastWeekDateForDay("20180923", 1, DayOfWeek.SATURDAY));
System.out.println(getLastWeekDateForDay("20180923", 2, DayOfWeek.FRIDAY));


输出量

20180922
20180914

09-04 14:56