У меня есть дата в далеком прошлом.
Я выяснил, что такое продолжительность между этой датой и сейчас.
Теперь я хотел бы знать - сколько это за годы?Преобразование продолжительности в годы в Java8 Date API?
Я придумал это решение с использованием Java8 API.
Это чудовищное решение, так как я должен сначала преобразовать продолжительность в дни вручную, потому что будет UnsupportedTemporalTypeException
иначе - LocalDate.plus(SECONDS)
не поддерживается по какой-либо причине.
Даже если компилятор разрешает этот вызов.
Есть еще несколько слов о возможности преобразования Duration
в лет?
LocalDate dateOne = LocalDate.of(1415, Month.JULY, 6);
Duration durationSinceGuss1 = Duration.between(LocalDateTime.of(dateOne, LocalTime.MIDNIGHT),LocalDateTime.now());
long yearsSinceGuss = ChronoUnit.YEARS.between(LocalDate.now(),
LocalDate.now().plus(
TimeUnit.SECONDS.toDays(
durationSinceGuss1.getSeconds()),
ChronoUnit.DAYS));
/*
* ERROR -
* LocalDate.now().plus(durationSinceGuss1) causes an Exception.
* Seconds are not Supported for LocalDate.plus()!!!
* WHY OR WHY CAN'T JAVA DO WHAT COMPILER ALLOWS ME TO DO?
*/
//long yearsSinceGuss = ChronoUnit.YEARS.between(LocalDate.now(), LocalDate.now().plus(durationSinceGuss));
/*
* ERROR -
* Still an exception!
* Even on explicitly converting duration to seconds.
* Everything like above. Seconds are just not allowed. Have to convert them manually first e.g. to Days?!
* WHY OR WHY CAN'T YOU CONVERT SECONDS TO DAYS OR SOMETHING AUTOMATICALLY, JAVA?
*/
//long yearsSinceGuss = ChronoUnit.YEARS.between(LocalDate.now(), LocalDate.now().plus(durationSinceGuss.getSeconds(), ChronoUnit.SECONDS));
Вы рассчитываете Длительность между датой в * прошлых * и 'now()', а затем попытайтесь рассчитать годы между 'now()' и * другой датой *, которая является Duration в * future *. ЗАЧЕМ?!?!? Пример: В этом году (2016 год) високосный год, но високосный день еще не произошел. Продолжительность с 3 февраля 2015 года по сегодняшний день ('3, 2016') в прошлом году составляет 365 дней. 365 дней с сегодняшнего дня * вчера * даты следующего года ('2 февраля 2017 года). Так ровно один год с оригинальной даты, но ваши расчеты говорят, что будущая дата будет меньше, чем через год. Результат неверен !! – Andreas