来自 YearMonth 和第 n DayOfWeek 的 LocalDate

jip*_*iee 3 java time java-8 localdate

我想将 a 转换为具有指定的YearMontha ,例如 2019 年 2 月的第二个星期二。LocalDateDayOfWeek

以下代码抛出DateTimeException

YearMonth yearMonth = YearMonth.of(2019, Month.FEBRUARY);
TemporalAdjuster secondTuesday = TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.TUESDAY);

LocalDate date = LocalDate.from(yearMonth).with(secondTuesday);
Run Code Online (Sandbox Code Playgroud)

为了使我的代码工作,我需要将最后一行替换为

LocalDate date = yearMonth.atDay(1).with(secondTuesday);
Run Code Online (Sandbox Code Playgroud)

是否有一种不需要使用的更清洁的解决方案atDay(1)

Ole*_*.V. 7

您已经自己找到了最好、最干净(或最不差)的解决方案:

\n\n
LocalDate date = yearMonth.atDay(1).with(secondTuesday);\n
Run Code Online (Sandbox Code Playgroud)\n\n

does\xe2\x80\x99t的参数atDay不一定需要为 1,但它需要是相关月份中的有效日期,所以为什么不是 1?

\n\n

with()始终返回与您调用它的类型相同的类型。也就是说,YearMonth.with()将始终返回 a YearMonth,从不返回 a LocalDate。因此您不能在那里使用调节器。

\n\n

我理解并同意你的反对意见,但你\xe2\x80\x99已经得到的是我们能做的最好的。您可以而且应该将其包装在一个具有好听名称的方法中。

\n