< prev index next >

src/java.base/share/classes/java/time/LocalDate.java

Print this page

        

@@ -1367,10 +1367,25 @@
      */
     public LocalDate plusDays(long daysToAdd) {
         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);
     }
 
     //-----------------------------------------------------------------------
< prev index next >