Это даст вам приближение. Это лучшее, что вы можете получить.
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.