我需要在Java日期中加上一个十进制的月份: ->我可以将此代码与joda time api结合使用,以向日期添加自然数月。但是,如何为日期添加十进制的月份(例如3.5)?
1 2 3
答案 0 :(得分:1)
这将给您一个近似值。这是您所能得到的最好的。
long oneMonthInNanos = ChronoUnit.MONTHS.getDuration().toNanos();
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Asia/Phnom_Penh"));
System.out.println("Now " + now);
System.out.println("In 3.5 months " + now.plusNanos(Math.round(3.5 * oneMonthInNanos)));
System.out.println("In 4.5 months " + now.plusNanos(Math.round(4.5 * oneMonthInNanos)));
System.out.println("In 12 months " + now.plusNanos(Math.round(12.0 * oneMonthInNanos)));
我刚才运行代码时的输出是:
Now 2018-11-06T22:31:36.460573+07:00[Asia/Phnom_Penh] In 3.5 months 2019-02-21T11:13:27.460573+07:00[Asia/Phnom_Penh] In 4.5 months 2019-03-23T21:42:33.460573+07:00[Asia/Phnom_Penh] In 12 months 2019-11-07T04:20:48.460573+07:00[Asia/Phnom_Penh]
正如评论中所说,没有一个很好的小数个月的定义。当比较第一个日期和最后一个日期时间时,您还可以清楚地看到12个月的总和并不是很精确,尽管很接近。请检查结果是否足以满足您的目的。
我正在使用java.time。我不知道Joda-Time是否有可能实现类似的目标。