--- old/src/java.base/share/classes/java/time/LocalDate.java 2016-01-05 20:48:38.022149740 +0300 +++ new/src/java.base/share/classes/java/time/LocalDate.java 2016-01-05 20:48:37.430149740 +0300 @@ -1369,6 +1369,21 @@ if (daysToAdd == 0) { return this; } + long dom = day + daysToAdd; + if (dom > 0 && dom <= 59) { // 59th Jan is 28th Feb, 59th Feb is 31st Mar + long monthLen = dom; + if (dom > 28) { + monthLen = lengthOfMonth(); + } + if (dom <= monthLen) { + return LocalDate.of(year, month, (int) dom); + } else if (month < 12) { + return LocalDate.of(year, month + 1, (int) (dom - monthLen)); + } else { + return LocalDate.of(year + 1, 1, (int) (dom - monthLen)); + } + } + long mjDay = Math.addExact(toEpochDay(), daysToAdd); return LocalDate.ofEpochDay(mjDay); }