如何解决Java LocalDate 在调用 plusDays plusMonths 和 plusYears 时得到两种不同的结果
大家好,我有这样的代码
+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0 +units=m +no_defs
我得到两个不同的结果
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));
}
谁能解释一下为什么?谢谢
解决方法
因为 plusDays
与给定的月份有关...
假设您在 9 月 26 日,再加上 5 天将是 10 月 1 日。
如果您在 8 月 26 日,则将您带到 8 月 31 日。
日期的算术不是数字的算术...一个月就是一个月,并且天数不能转换。
查看有关 plusMonths
的文档,例如:
public LocalDate plusMonths(long MonthToAdd)
...
例如,2007-03-31 加上一个月将导致无效日期 2007-04-31。不是返回无效结果,而是选择了该月的最后一个有效日期 2007-04-30。
这是普遍预期的,在日期上增加 1 个月将导致您在下个月的日期。但天数不一样,你真的想移动几天。
,尝试 printing the intermediate results 以帮助形象化操作如何应用于不同顺序的日期:
// Fix the date,so this is reproducible after today!
LocalDate now = LocalDate.of(2021,4,26);
System.out.println("First:");
System.out.println(now);
System.out.println(now.plusYears(1));
System.out.println(now.plusYears(1).plusMonths(6));
System.out.println(now.plusYears(1).plusMonths(6).plusDays(5));
System.out.println("Second:");
System.out.println(now);
System.out.println(now.plusDays(5));
System.out.println(now.plusDays(5).plusMonths(6));
System.out.println(now.plusDays(5).plusMonths(6).plusYears(1));
输出:
First:
2021-04-26
2022-04-26
2022-10-26
2022-10-31
Second:
2021-04-26
2021-05-01
2021-11-01
2022-11-01
差异是因为四月和十月的长度不同:从今天起 5 天,你是五月;距离 10 月 26 日还有 5 天,您仍处于 10 月。
,四月有 30 天,即 10 月 31 日。如果先加上天数就会进入下个月,如果先加上月数,则不会:
2021-04-26 + 1Year -> 2022-04-26 + 6Month -> 2022-10-26 + 5Days -> 2022-10-31
2021-04-26 + 5Days -> 2021-05-01 + 6Month -> 2021-11-01 + 1Year -> 2022-11-01
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。