JavaFX获得下个月的第一天

时间:2018-12-03 16:20:43

标签: java javafx datepicker

我正在尝试从LocalDate对象获取下个月的第一天,但​​遇到了一些问题。

我有一个日期选择器,用户可以不受限制地选择他们想要的任何日期,而我需要获得下个月的第一天,这是我考虑过的事情:

LocalDate localDate = myDatePicker.getValue();
LocalTime startTime = LocalTime.of(0, 0);

LocalDate endDate = LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);

但是,我看到选择12月时可能会出现问题,如果发生的话,则致电

LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);

应该失败,因为我将月份值传递给了13。现在我可以选择检查月份值是否为12月,如果可以,可以将年份加1并从0开始,如下所示:

if(localDate.getMonthValue() >= 12)
    LocalDate.of(localDate.getYear() + 1, 0, 0);

但是我觉得必须在课堂上解决这个问题。有人知道我的关于将13传递给LocalDate.of month值的假设是否会导致错误吗?如果是这样,有没有一种方法可以做我想做的事情,看起来还不错,可以使用内置方法?

3 个答案:

答案 0 :(得分:6)

幸运的是,Java通过调节器和TemporalAdjusters.firstDayOfNextMonth()的思想使真正变得容易:

import java.time.*;
import java.time.temporal.*;

public class Test {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2018, 12, 3);
        LocalDate date2 = date1.with(TemporalAdjusters.firstDayOfNextMonth());
        System.out.println(date2); // 2019-01-01
    }
}

答案 1 :(得分:4)

  1. 自定义方式:

    • .plusMonths(1)以获取下个月
    • .withDayOfMonth(1)来获得第一天

      LocalDate localDate = LocalDate.of(2018, 12, 15);
      LocalDate firstNext = localDate.plusMonths(1).withDayOfMonth(1);
      // or     firstNext = localDate.withDayOfMonth(1).plusMonths(1);
      System.out.println(firstNext); //2019-01-01
      

  1. 内置方式:

    • TemporalAdjusters.firstDayOfNextMonth()

      firstNext = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
      
      // does a temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS); operation
      

答案 2 :(得分:4)

使用LocalDate可以通过firstDayofNextMonth获得TemporalAdjusters.firstDayOfNextMonth()

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class Test {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        LocalDate firstDayOfNextMonth = date.with(TemporalAdjusters.firstDayOfNextMonth());
        System.out.println(firstDayOfNextMonth);
    }
}