src/share/classes/java/time/chrono/JapaneseChronology.java

Print this page

        

*** 52,80 **** * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ! package java.time.calendar; import java.io.Serializable; import java.time.DateTimeException; import java.time.LocalDate; - import java.time.temporal.Chrono; import java.time.temporal.ChronoField; - import java.time.temporal.ChronoLocalDate; - import java.time.temporal.Era; - import java.time.temporal.ISOChrono; import java.time.temporal.TemporalAccessor; import java.time.temporal.ValueRange; ! import java.time.temporal.Year; import java.util.Arrays; import java.util.Calendar; - import java.util.HashMap; import java.util.List; import java.util.Locale; - import java.util.Map; import sun.util.calendar.CalendarSystem; import sun.util.calendar.LocalGregorianCalendar; /** --- 52,77 ---- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ ! package java.time.chrono; import java.io.Serializable; + import java.time.Clock; import java.time.DateTimeException; + import java.time.Instant; import java.time.LocalDate; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.ValueRange; ! import java.time.Year; ! import java.time.ZoneId; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Locale; import sun.util.calendar.CalendarSystem; import sun.util.calendar.LocalGregorianCalendar; /**
*** 91,101 **** * <h3>Specification for implementors</h3> * This class is immutable and thread-safe. * * @since 1.8 */ ! public final class JapaneseChrono extends Chrono<JapaneseChrono> implements Serializable { // TODO: definition for unknown era may break requirement that year-of-era >= 1 static final LocalGregorianCalendar JCAL = (LocalGregorianCalendar) CalendarSystem.forName("japanese"); --- 88,98 ---- * <h3>Specification for implementors</h3> * This class is immutable and thread-safe. * * @since 1.8 */ ! public final class JapaneseChronology extends Chronology implements Serializable { // TODO: definition for unknown era may break requirement that year-of-era >= 1 static final LocalGregorianCalendar JCAL = (LocalGregorianCalendar) CalendarSystem.forName("japanese");
*** 103,149 **** static final Locale LOCALE = Locale.forLanguageTag("ja-JP-u-ca-japanese"); /** * Singleton instance for Japanese chronology. */ ! public static final JapaneseChrono INSTANCE = new JapaneseChrono(); /** * The singleton instance for the before Meiji era ( - 1868-09-07) * which has the value -999. */ ! public static final Era<JapaneseChrono> ERA_SEIREKI = JapaneseEra.SEIREKI; /** * The singleton instance for the Meiji era (1868-09-08 - 1912-07-29) * which has the value -1. */ ! public static final Era<JapaneseChrono> ERA_MEIJI = JapaneseEra.MEIJI; /** * The singleton instance for the Taisho era (1912-07-30 - 1926-12-24) * which has the value 0. */ ! public static final Era<JapaneseChrono> ERA_TAISHO = JapaneseEra.TAISHO; /** * The singleton instance for the Showa era (1926-12-25 - 1989-01-07) * which has the value 1. */ ! public static final Era<JapaneseChrono> ERA_SHOWA = JapaneseEra.SHOWA; /** * The singleton instance for the Heisei era (1989-01-08 - current) * which has the value 2. */ ! public static final Era<JapaneseChrono> ERA_HEISEI = JapaneseEra.HEISEI; /** * Serialization version. */ private static final long serialVersionUID = 459996390165777884L; //----------------------------------------------------------------------- /** * Restricted constructor. */ ! private JapaneseChrono() { } /** * Resolve singleton. * --- 100,146 ---- static final Locale LOCALE = Locale.forLanguageTag("ja-JP-u-ca-japanese"); /** * Singleton instance for Japanese chronology. */ ! public static final JapaneseChronology INSTANCE = new JapaneseChronology(); /** * The singleton instance for the before Meiji era ( - 1868-09-07) * which has the value -999. */ ! public static final Era ERA_SEIREKI = JapaneseEra.SEIREKI; /** * The singleton instance for the Meiji era (1868-09-08 - 1912-07-29) * which has the value -1. */ ! public static final Era ERA_MEIJI = JapaneseEra.MEIJI; /** * The singleton instance for the Taisho era (1912-07-30 - 1926-12-24) * which has the value 0. */ ! public static final Era ERA_TAISHO = JapaneseEra.TAISHO; /** * The singleton instance for the Showa era (1926-12-25 - 1989-01-07) * which has the value 1. */ ! public static final Era ERA_SHOWA = JapaneseEra.SHOWA; /** * The singleton instance for the Heisei era (1989-01-08 - current) * which has the value 2. */ ! public static final Era ERA_HEISEI = JapaneseEra.HEISEI; /** * Serialization version. */ private static final long serialVersionUID = 459996390165777884L; //----------------------------------------------------------------------- /** * Restricted constructor. */ ! private JapaneseChronology() { } /** * Resolve singleton. *
*** 155,166 **** //----------------------------------------------------------------------- /** * Gets the ID of the chronology - 'Japanese'. * <p> ! * The ID uniquely identifies the {@code Chrono}. ! * It can be used to lookup the {@code Chrono} using {@link #of(String)}. * * @return the chronology ID - 'Japanese' * @see #getCalendarType() */ @Override --- 152,163 ---- //----------------------------------------------------------------------- /** * Gets the ID of the chronology - 'Japanese'. * <p> ! * The ID uniquely identifies the {@code Chronology}. ! * It can be used to lookup the {@code Chronology} using {@link #of(String)}. * * @return the chronology ID - 'Japanese' * @see #getCalendarType() */ @Override
*** 171,181 **** /** * Gets the calendar type of the underlying calendar system - 'japanese'. * <p> * The calendar type is an identifier defined by the * <em>Unicode Locale Data Markup Language (LDML)</em> specification. ! * It can be used to lookup the {@code Chrono} using {@link #of(String)}. * It can also be used as part of a locale, accessible via * {@link Locale#getUnicodeLocaleType(String)} with the key 'ca'. * * @return the calendar system type - 'japanese' * @see #getId() --- 168,178 ---- /** * Gets the calendar type of the underlying calendar system - 'japanese'. * <p> * The calendar type is an identifier defined by the * <em>Unicode Locale Data Markup Language (LDML)</em> specification. ! * It can be used to lookup the {@code Chronology} using {@link #of(String)}. * It can also be used as part of a locale, accessible via * {@link Locale#getUnicodeLocaleType(String)} with the key 'ca'. * * @return the calendar system type - 'japanese' * @see #getId()
*** 185,220 **** return "japanese"; } //----------------------------------------------------------------------- @Override ! public ChronoLocalDate<JapaneseChrono> date(Era<JapaneseChrono> era, int yearOfEra, int month, int dayOfMonth) { if (era instanceof JapaneseEra == false) { throw new DateTimeException("Era must be JapaneseEra"); } return JapaneseDate.of((JapaneseEra) era, yearOfEra, month, dayOfMonth); } @Override ! public ChronoLocalDate<JapaneseChrono> date(int prolepticYear, int month, int dayOfMonth) { return new JapaneseDate(LocalDate.of(prolepticYear, month, dayOfMonth)); } @Override ! public ChronoLocalDate<JapaneseChrono> dateYearDay(int prolepticYear, int dayOfYear) { LocalDate date = LocalDate.ofYearDay(prolepticYear, dayOfYear); return date(prolepticYear, date.getMonthValue(), date.getDayOfMonth()); } @Override ! public ChronoLocalDate<JapaneseChrono> date(TemporalAccessor temporal) { if (temporal instanceof JapaneseDate) { return (JapaneseDate) temporal; } return new JapaneseDate(LocalDate.from(temporal)); } //----------------------------------------------------------------------- /** * Checks if the specified year is a leap year. * <p> * Japanese calendar leap years occur exactly in line with ISO leap years. --- 182,252 ---- return "japanese"; } //----------------------------------------------------------------------- @Override ! public JapaneseDate date(Era era, int yearOfEra, int month, int dayOfMonth) { if (era instanceof JapaneseEra == false) { throw new DateTimeException("Era must be JapaneseEra"); } return JapaneseDate.of((JapaneseEra) era, yearOfEra, month, dayOfMonth); } @Override ! public JapaneseDate date(int prolepticYear, int month, int dayOfMonth) { return new JapaneseDate(LocalDate.of(prolepticYear, month, dayOfMonth)); } @Override ! public JapaneseDate dateYearDay(int prolepticYear, int dayOfYear) { LocalDate date = LocalDate.ofYearDay(prolepticYear, dayOfYear); return date(prolepticYear, date.getMonthValue(), date.getDayOfMonth()); } @Override ! public JapaneseDate date(TemporalAccessor temporal) { if (temporal instanceof JapaneseDate) { return (JapaneseDate) temporal; } return new JapaneseDate(LocalDate.from(temporal)); } + @Override + public JapaneseDate dateYearDay(Era era, int yearOfEra, int dayOfYear) { + return dateYearDay(prolepticYear(era, yearOfEra), dayOfYear); + } + + @Override + public JapaneseDate dateNow() { + return dateNow(Clock.systemDefaultZone()); + } + + @Override + public JapaneseDate dateNow(ZoneId zone) { + return dateNow(Clock.system(zone)); + } + + @Override + public JapaneseDate dateNow(Clock clock) { + return date(LocalDate.now(clock)); + } + + @Override + public ChronoLocalDateTime<JapaneseDate> localDateTime(TemporalAccessor temporal) { + return (ChronoLocalDateTime<JapaneseDate>)super.localDateTime(temporal); + } + + @Override + public ChronoZonedDateTime<JapaneseDate> zonedDateTime(TemporalAccessor temporal) { + return (ChronoZonedDateTime<JapaneseDate>)super.zonedDateTime(temporal); + } + + @Override + public ChronoZonedDateTime<JapaneseDate> zonedDateTime(Instant instant, ZoneId zone) { + return (ChronoZonedDateTime<JapaneseDate>)super.zonedDateTime(instant, zone); + } + //----------------------------------------------------------------------- /** * Checks if the specified year is a leap year. * <p> * Japanese calendar leap years occur exactly in line with ISO leap years.
*** 224,238 **** * @param prolepticYear the proleptic-year to check, not validated for range * @return true if the year is a leap year */ @Override public boolean isLeapYear(long prolepticYear) { ! return ISOChrono.INSTANCE.isLeapYear(prolepticYear); } @Override ! public int prolepticYear(Era<JapaneseChrono> era, int yearOfEra) { if (era instanceof JapaneseEra == false) { throw new DateTimeException("Era must be JapaneseEra"); } JapaneseEra jera = (JapaneseEra) era; int gregorianYear = jera.getPrivateEra().getSinceDate().getYear() + yearOfEra - 1; --- 256,270 ---- * @param prolepticYear the proleptic-year to check, not validated for range * @return true if the year is a leap year */ @Override public boolean isLeapYear(long prolepticYear) { ! return IsoChronology.INSTANCE.isLeapYear(prolepticYear); } @Override ! public int prolepticYear(Era era, int yearOfEra) { if (era instanceof JapaneseEra == false) { throw new DateTimeException("Era must be JapaneseEra"); } JapaneseEra jera = (JapaneseEra) era; int gregorianYear = jera.getPrivateEra().getSinceDate().getYear() + yearOfEra - 1;
*** 259,275 **** * @param eraValue the era value * @return the Japanese {@code Era} for the given numeric era value * @throws DateTimeException if {@code eraValue} is invalid */ @Override ! public Era<JapaneseChrono> eraOf(int eraValue) { return JapaneseEra.of(eraValue); } @Override ! public List<Era<JapaneseChrono>> eras() { ! return Arrays.<Era<JapaneseChrono>>asList(JapaneseEra.values()); } //----------------------------------------------------------------------- @Override public ValueRange range(ChronoField field) { --- 291,307 ---- * @param eraValue the era value * @return the Japanese {@code Era} for the given numeric era value * @throws DateTimeException if {@code eraValue} is invalid */ @Override ! public Era eraOf(int eraValue) { return JapaneseEra.of(eraValue); } @Override ! public List<Era> eras() { ! return Arrays.<Era>asList(JapaneseEra.values()); } //----------------------------------------------------------------------- @Override public ValueRange range(ChronoField field) {