jdk/src/share/classes/java/time/chrono/JapaneseDate.java
changeset 17474 8c100beabcc0
parent 16852 60207b2b4b42
child 19030 32f129cb6351
--- a/jdk/src/share/classes/java/time/chrono/JapaneseDate.java	Wed May 15 15:01:59 2013 +0100
+++ b/jdk/src/share/classes/java/time/chrono/JapaneseDate.java	Wed May 15 07:48:57 2013 -0700
@@ -83,6 +83,7 @@
 import java.util.Calendar;
 import java.util.Objects;
 
+import sun.util.calendar.CalendarDate;
 import sun.util.calendar.LocalGregorianCalendar;
 
 /**
@@ -101,7 +102,7 @@
  * Calling {@code japaneseDate.get(ERA)} will return 2, corresponding to
  * {@code JapaneseChronology.ERA_HEISEI}.<br>
  *
- * <h3>Specification for implementors</h3>
+ * @implSpec
  * This class is immutable and thread-safe.
  *
  * @since 1.8
@@ -234,6 +235,24 @@
         return of(prolepticYear, date.getMonthValue(), date.getDayOfMonth());
     }
 
+    static JapaneseDate ofYearDay(JapaneseEra era, int yearOfEra, int dayOfYear) {
+        CalendarDate firstDay = era.getPrivateEra().getSinceDate();
+        LocalGregorianCalendar.Date jdate = JapaneseChronology.JCAL.newCalendarDate(null);
+        jdate.setEra(era.getPrivateEra());
+        if (yearOfEra == 1) {
+            jdate.setDate(yearOfEra, firstDay.getMonth(), firstDay.getDayOfMonth() + dayOfYear - 1);
+        } else {
+            jdate.setDate(yearOfEra, 1, dayOfYear);
+        }
+        JapaneseChronology.JCAL.normalize(jdate);
+        if (era.getPrivateEra() != jdate.getEra() || yearOfEra != jdate.getYear()) {
+            throw new DateTimeException("Invalid parameters");
+        }
+        LocalDate localdate = LocalDate.of(jdate.getNormalizedYear(),
+                                      jdate.getMonth(), jdate.getDayOfMonth());
+        return new JapaneseDate(era, yearOfEra, localdate);
+    }
+
     /**
      * Obtains a {@code JapaneseDate} representing a date in the Japanese calendar
      * system from the era, year-of-era, month-of-year and day-of-month fields.