Joe*_*Joe 2 java javafx datepicker
我试图从LocalDate对象获取下个月的第一天,但遇到了一些问题.
我有一个日期选择器,用户可以选择他们想要的任何日期,没有限制,我需要获得下个月的第一天,这是我想到的:
LocalDate localDate = myDatePicker.getValue();
LocalTime startTime = LocalTime.of(0, 0);
LocalDate endDate = LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);
Run Code Online (Sandbox Code Playgroud)
但是我看到选择12月份时可能会出现问题,如果发生这种情况则会发生
LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);
Run Code Online (Sandbox Code Playgroud)
应该失败,因为我将它传递给它一个月值13.现在我可以选择检查月份值是否为12月,如果是,我可以在年份中添加1并从0开始,如下所示:
if(localDate.getMonthValue() >= 12)
LocalDate.of(localDate.getYear() + 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但是我觉得必须有一种方法来解决这个问题.有谁知道我将13传递给LocalDate.of月值的假设是否会导致错误?如果是这样有一种方法可以做我想做的事情,看起来不那么糟糕,并使用构建方法?
幸运的是,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
}
}
Run Code Online (Sandbox Code Playgroud)
自定义方式:
.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
Run Code Online (Sandbox Code Playgroud)内置方式:
TemporalAdjusters.firstDayOfNextMonth()
firstNext = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
// does a temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS); operation
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |