java android错误:当前月份不能晚于结束月份

ttp71kqs  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(283)

我正在尝试为材质日期范围选取器对话框设置约束。这样做的目的是将可选择日期的范围从当天限制到一个月后的同一天。
我有一个构建约束的方法:

public CalendarConstraints.Builder setCalendarConstraints() {
    CalendarConstraints.Builder constraints = new CalendarConstraints.Builder();

    long min = setMinDate();
    long max = setMaxDate();

    constraints.setStart(min);
    constraints.setEnd(max);

    return constraints;
}

以下两种方法用于获取最短和最长日期:

// Maximum date for the date picker is the current date + 1 month
public long setMaxDate() {
    LocalDate now = LocalDate.now();
    LocalDate max;

    if (now.getMonthValue() == 12) {
        max = LocalDate.of(now.getYear(), 1, now.getDayOfMonth());
        max.plusYears(1);
    } else {
        max = LocalDate.of(now.getYear(), now.getMonth().plus(1), now.getDayOfMonth());
    }
    return max.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();
}

两周前我测试我的应用程序时,一切都正常,所以我认为问题是因为我们现在是在12月份。我试图在12月份的当前年份中添加一年,但它似乎不起作用,因为我有以下错误:
java.lang.illegalargumentexception:当前月份不能晚于结束月份

wqlqzqxt

wqlqzqxt1#

time类使用不可变对象。
方法 LocalDate::plusYears() 不适用于 LocalDate 它自己。正如javadoc所说,它返回一个新对象,一个原始对象的副本 LocalDate 对象,但添加了一年。
所以你需要写:

max = max.plusYears(1);

顺便说一句,你不需要检查十二月。

LocalDate max = LocalDate.now().plusMonths(1)

不管你是否在12月都能成功。

busg9geu

busg9geu2#

尝试

LocalDate.now().plusMonths( 1 );

对于max

相关问题