您好,我在尝试将行为从日历迁移到本地日期时遇到了麻烦。
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上有类似行为,请帮助我。谢谢。
您将无法仅调用一种方法来获得相同的结果。如果您确定将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);
}