日历行为与LocalDate不兼容?

问题描述 投票:0回答:1

您好,我在尝试将行为从日历迁移到本地日期时遇到了麻烦。

payDate.set(Calendar.DAY_OF_MONTH,payDay)

让我们假设payDate的当前日期为2020-01-29

[出于业务原因,payDay可以具有0的值,因此,当在上一个方案中执行前一个代码行时,结果是payDate将日期更新为2019-12-31,也就是说,日期可以追溯到上个月的最后一天。

我不确定,这是技术原因,如果有人可以向我解释这一点,我将非常感激,我尝试检查Java文档,但没有帮助。

所以我需要使用LocalDate Java库复制该行为。从我的角度来看; set中的Calendar方法与LocalDate中DAY_OF_MONTH的值类似:

payDate.withDayOfMonth(payDay)

但是当出现以下情况并且payDay等于0时,我得到一个错误:

java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 0

[此外,我对如何启用规则时在localDate中获得相同的日历结果有一些想法(如果payDay为0,则返回到上个月的最后一天),但是太冗长了。

[如果您知道LocalDate上有类似行为,请帮助我。谢谢。

java java-time localdate java-calendar
1个回答
0
投票

您将无法仅调用一种方法来获得相同的结果。如果您确定将DAY_OF_MONTH设置为0应该导致它回滚一个月(这是我经过业务分析师或产品所有者进行健全性检查的类型),那么您将必须要做这样的事情:

    int payDay = 0;
    LocalDate payDate = LocalDate.of(2020, Month.JANUARY, 29);

    if(payDay == 0) {
        payDate = payDate.minusMonths(1);
        payDay = payDate.lengthOfMonth();
    }

    payDate = payDate.withDayOfMonth(payDay);

另一种方法:

   int payDay = 0;
   LocalDate payDate = LocalDate.of(2020, Month.JANUARY, 29);
   if(payDay == 0) {
      payDate = payDate.withDayOfMonth(1).minusDays(1);
   } else {
      payDate = payDate.withDayOfMonth(payDay);
   }
© www.soinside.com 2019 - 2024. All rights reserved.