java - Java LocalDate 在调用 plusDays plusMonths 和 plusYears 时得到两个不同的结果
问题描述
大家好,我有这样的代码
public static void main(String[] args) {
System.out.println(LocalDate.now().plusYears(1).plusMonths(6).plusDays(5));
System.out.println(LocalDate.now().plusDays(5).plusMonths(6).plusYears(1));
}
我得到两个不同的结果
2022-10-31
2022-11-01
有人可以解释为什么吗?谢谢
解决方案
因为plusDays
与给定的月份有关...
假设您在 9 月 26 日,加上 5 天将得到 10 月 1 日。
如果您在 8 月 26 日,则会将您带到 8 月 31 日。
日期的算术不是数字的算术......一个月就是一个月,并且不能在几天内转换。
参见文档plusMonths
,例如:
public LocalDate plusMonths(long monthsToAdd)
...
例如,2007-03-31 加上一个月将导致无效日期 2007-04-31。代替返回无效结果,而是选择该月的最后一个有效日期 2007-04-30。
这是通常所期望的,将 1 个月添加到日期将导致您到达下个月的日期。但是几天不一样,你真的要移动几天。
推荐阅读
- c# - 如何将包含然后包含在实体框架中转换为 MySQL 查询
- asp.net-core - 部署 asp.net core 3.1 应用程序的问题
- python-3.x - 类属性 - 从列表中删除字典
- python - Numpy for 循环矢量化:使用 np.all 广播和测试独特元素
- r - 对列表中每个数据框的前 4 行进行子集化
- javascript - 使用 && 语法 JS 有条件地执行函数
- spring-boot - 如何将 CircuitBreaker 与 TimeLimiter 和 Bulkhead 结合使用?
- sql - 如何计算日期列中的平均值
- reactjs - orderBy 查询不起作用,因此尝试区分手动但无法使其正常工作
- reactjs - 反应“错误:超过最大更新深度。” 带有功能组件和钩子