在Java中将十进制月份添加到Date

时间:2018-11-06 14:11:08

标签: java date

我需要在Java日期中加上一个十进制的月份: ->我可以将此代码与joda time api结合使用,以向日期添加自然数月。但是,如何为日期添加十进制的月份(例如3.5)?

1 2 3

1 个答案:

答案 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是否有可能实现类似的目标。