LocalDate.plusMonth 给出了错误的二月结果

Cho*_*eem 1 java date java-8

我正在尝试使用 java.time.LocalDate 中的 plusMonths API。通过java doc,很明显,日期会针对任何无效的超过日期进行调整。

例如 31-03-2017 + 1 Month = 31-04-2017--> 30-04-2017(因为 4 月 31 日无效)。

但是,当我尝试将 API 用于二月的日期时,它不会返回下个月的最后一天(例如三月),而是在添加 30 天后返回日期。

例如 28-02-2017 + 1 个月 = 29-03-2017(预计 31-03-2017)。

public class AddMonthTest {
    public static void main(String[] args) {            
        System.out.println(LocalDate.of(2017, 02, 28).plusMonths(1));       
}
Run Code Online (Sandbox Code Playgroud)

给出输出: 2017-03-28 其中预期它应该返回 31-03-2017。

Rom*_*hyn 5

您可以使用 TemporalAdjusters.lastDayOfMonth() 移动到一个月的最后一天

public static void main(String[] args) {
    System.out.println(LocalDate.of(2017, 2, 28).plusMonths(1).with(TemporalAdjusters.lastDayOfMonth()));
}
Run Code Online (Sandbox Code Playgroud)