Also den ersten Tag von Hinten?!5 Jahre hizufügen, davon 1 Monat abziehen und dann von diesem Monat den letzten Tag nehmen?
22.01.2019
+1 Jahr (22.01.2020)
- 1 Monat (22.12.2019)
letzter Tag (=31.12.2019)
LocalDate::atStartOfDay
zu machen. ZoneRules können ein Hund sein und dir einen Tag nehmen (da hat es irgendwo mal einen Tag nicht gegeben, da auf aktuellen Kalender umgestellt worden ist).Date input = new Date();
Date output = Date.from(input.toInstant()
.atZone(ZoneOffset.UTC)
.plusYears(5).minusMonths(1).with(TemporalAdjusters.lastDayOfMonth())
.truncatedTo(ChronoUnit.DAYS)
.toInstant());
Date input = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(input);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.YEAR, 5);
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date output = calendar.getTime();
Hast Du hierzu ein Beispiel? Ich würde gerne nachvollziehen, wann und warum truncatedTo und atStartOfDay(tz) zu unterschiedlichen Ergebnissen führen.da hat es irgendwo mal einen Tag nicht gegeben, da auf aktuellen Kalender umgestellt worden ist
Z.B.: http://mentalfloss.com/article/51370/why-our-calendars-skipped-11-days-1752Hast Du hierzu ein Beispiel?
Datum ist leider mit sehr viel Workarounds behaftet, weil es eben nicht einheitlich ist (siehe oben). Es gibt sicher einen Corner-Case wo das zutreffen könnte, aber konkret nicht.Ich würde gerne nachvollziehen, wann und warum truncatedTo und atStartOfDay(tz) zu unterschiedlichen Ergebnissen führen.