Добавить десятичный месяц к дате в Java - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужно добавить десятичную сумму месяца к дате Java: -> Я могу использовать этот код с joda time api, чтобы добавить естественное количество месяцев к дате. Но как я могу добавить десятичную сумму месяца (например, 3,5) к дате?

Date date = new Date();
DateTime dateTime = new DateTime(date);
dateTime = dateTime.plusMonths(3);
Date newDate = dateTime.toDate();

1 Ответ

0 голосов
/ 06 ноября 2018

Это даст вам приближение. Это лучшее, что вы можете получить.

    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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...