src/share/classes/java/time/temporal/ChronoField.java

Print this page

        

*** 74,83 **** --- 74,88 ---- import java.time.Instant; import java.time.Year; import java.time.ZoneOffset; import java.time.chrono.ChronoLocalDate; import java.time.chrono.Chronology; + import java.util.Locale; + import java.util.Objects; + import java.util.ResourceBundle; + import sun.util.locale.provider.LocaleProviderAdapter; + import sun.util.locale.provider.LocaleResources; /** * A standard set of fields. * <p> * This set of fields provide field-based access to manipulate a date, time or date-time.
*** 185,195 **** * The second-of-minute. * <p> * This counts the second within the minute, from 0 to 59. * This field has the same meaning for all calendar systems. */ ! SECOND_OF_MINUTE("SecondOfMinute", SECONDS, MINUTES, ValueRange.of(0, 59)), /** * The second-of-day. * <p> * This counts the second within the day, from 0 to (24 * 60 * 60) - 1. * This field has the same meaning for all calendar systems. --- 190,200 ---- * The second-of-minute. * <p> * This counts the second within the minute, from 0 to 59. * This field has the same meaning for all calendar systems. */ ! SECOND_OF_MINUTE("SecondOfMinute", SECONDS, MINUTES, ValueRange.of(0, 59), "second"), /** * The second-of-day. * <p> * This counts the second within the day, from 0 to (24 * 60 * 60) - 1. * This field has the same meaning for all calendar systems.
*** 199,209 **** * The minute-of-hour. * <p> * This counts the minute within the hour, from 0 to 59. * This field has the same meaning for all calendar systems. */ ! MINUTE_OF_HOUR("MinuteOfHour", MINUTES, HOURS, ValueRange.of(0, 59)), /** * The minute-of-day. * <p> * This counts the minute within the day, from 0 to (24 * 60) - 1. * This field has the same meaning for all calendar systems. --- 204,214 ---- * The minute-of-hour. * <p> * This counts the minute within the hour, from 0 to 59. * This field has the same meaning for all calendar systems. */ ! MINUTE_OF_HOUR("MinuteOfHour", MINUTES, HOURS, ValueRange.of(0, 59), "minute"), /** * The minute-of-day. * <p> * This counts the minute within the day, from 0 to (24 * 60) - 1. * This field has the same meaning for all calendar systems.
*** 230,240 **** * <p> * This counts the hour within the day, from 0 to 23. * This is the hour that would be observed on a standard 24-hour digital clock. * This field has the same meaning for all calendar systems. */ ! HOUR_OF_DAY("HourOfDay", HOURS, DAYS, ValueRange.of(0, 23)), /** * The clock-hour-of-day. * <p> * This counts the hour within the AM/PM, from 1 to 24. * This is the hour that would be observed on a 24-hour analog wall clock. --- 235,245 ---- * <p> * This counts the hour within the day, from 0 to 23. * This is the hour that would be observed on a standard 24-hour digital clock. * This field has the same meaning for all calendar systems. */ ! HOUR_OF_DAY("HourOfDay", HOURS, DAYS, ValueRange.of(0, 23), "hour"), /** * The clock-hour-of-day. * <p> * This counts the hour within the AM/PM, from 1 to 24. * This is the hour that would be observed on a 24-hour analog wall clock.
*** 245,255 **** * The am-pm-of-day. * <p> * This counts the AM/PM within the day, from 0 (AM) to 1 (PM). * This field has the same meaning for all calendar systems. */ ! AMPM_OF_DAY("AmPmOfDay", HALF_DAYS, DAYS, ValueRange.of(0, 1)), /** * The day-of-week, such as Tuesday. * <p> * This represents the standard concept of the day of the week. * In the default ISO calendar system, this has values from Monday (1) to Sunday (7). --- 250,260 ---- * The am-pm-of-day. * <p> * This counts the AM/PM within the day, from 0 (AM) to 1 (PM). * This field has the same meaning for all calendar systems. */ ! AMPM_OF_DAY("AmPmOfDay", HALF_DAYS, DAYS, ValueRange.of(0, 1), "dayperiod"), /** * The day-of-week, such as Tuesday. * <p> * This represents the standard concept of the day of the week. * In the default ISO calendar system, this has values from Monday (1) to Sunday (7).
*** 261,271 **** * <p> * Calendar systems that do not have a standard seven day week should implement this field * if they have a similar concept of named or numbered days within a period similar * to a week. It is recommended that the numbering starts from 1. */ ! DAY_OF_WEEK("DayOfWeek", DAYS, WEEKS, ValueRange.of(1, 7)), /** * The aligned day-of-week within a month. * <p> * This represents concept of the count of days within the period of a week * where the weeks are aligned to the start of the month. --- 266,276 ---- * <p> * Calendar systems that do not have a standard seven day week should implement this field * if they have a similar concept of named or numbered days within a period similar * to a week. It is recommended that the numbering starts from 1. */ ! DAY_OF_WEEK("DayOfWeek", DAYS, WEEKS, ValueRange.of(1, 7), "weekday"), /** * The aligned day-of-week within a month. * <p> * This represents concept of the count of days within the period of a week * where the weeks are aligned to the start of the month.
*** 310,320 **** * <p> * Non-ISO calendar systems should implement this field using the most recognized * day-of-month values for users of the calendar system. * Normally, this is a count of days from 1 to the length of the month. */ ! DAY_OF_MONTH("DayOfMonth", DAYS, MONTHS, ValueRange.of(1, 28, 31)), /** * The day-of-year. * <p> * This represents the concept of the day within the year. * In the default ISO calendar system, this has values from 1 to 365 in standard --- 315,325 ---- * <p> * Non-ISO calendar systems should implement this field using the most recognized * day-of-month values for users of the calendar system. * Normally, this is a count of days from 1 to the length of the month. */ ! DAY_OF_MONTH("DayOfMonth", DAYS, MONTHS, ValueRange.of(1, 28, 31), "day"), /** * The day-of-year. * <p> * This represents the concept of the day within the year. * In the default ISO calendar system, this has values from 1 to 365 in standard
*** 375,395 **** * <p> * Non-ISO calendar systems should implement this field using the most recognized * month-of-year values for users of the calendar system. * Normally, this is a count of months starting from 1. */ ! MONTH_OF_YEAR("MonthOfYear", MONTHS, YEARS, ValueRange.of(1, 12)), /** ! * The epoch-month based on the Java epoch of 1970-01-01. * <p> ! * This field is the sequential count of months where January 1970 (ISO) is zero. * Note that this uses the <i>local</i> time-line, ignoring offset and time-zone. * <p> ! * Non-ISO calendar systems should also implement this field to represent a sequential ! * count of months. It is recommended to define zero as the month of 1970-01-01 (ISO). */ ! EPOCH_MONTH("EpochMonth", MONTHS, FOREVER, ValueRange.of((Year.MIN_VALUE - 1970L) * 12, (Year.MAX_VALUE - 1970L) * 12L - 1L)), /** * The year within the era. * <p> * This represents the concept of the year within the era. * This field is typically used with {@link #ERA}. --- 380,410 ---- * <p> * Non-ISO calendar systems should implement this field using the most recognized * month-of-year values for users of the calendar system. * Normally, this is a count of months starting from 1. */ ! MONTH_OF_YEAR("MonthOfYear", MONTHS, YEARS, ValueRange.of(1, 12), "month"), /** ! * The proleptic-month based, counting months sequentially from year 0. * <p> ! * This field is the sequential count of months where the first month ! * in proleptic-year zero has the value zero. ! * Later months have increasingly larger values. ! * Earlier months have increasingly small values. ! * There are no gaps or breaks in the sequence of months. * Note that this uses the <i>local</i> time-line, ignoring offset and time-zone. * <p> ! * In the default ISO calendar system, June 2012 would have the value ! * {@code (2012 * 12 + 6 - 1)}. This field is primarily for internal use. ! * <p> ! * Non-ISO calendar systems must implement this field as per the definition above. ! * It is just a simple zero-based count of elapsed months from the start of proleptic-year 0. ! * All calendar systems with a full proleptic-year definition will have a year zero. ! * If the calendar system has a minimum year that excludes year zero, then one must ! * be extrapolated in order for this method to be defined. */ ! PROLEPTIC_MONTH("ProlepticMonth", MONTHS, FOREVER, ValueRange.of(Year.MIN_VALUE * 12L, Year.MAX_VALUE * 12L + 11)), /** * The year within the era. * <p> * This represents the concept of the year within the era. * This field is typically used with {@link #ERA}.
*** 444,454 **** * and increasingly negative for the earlier era. * If the calendar system has more than two eras, then the proleptic-year value may be * defined with any appropriate value, although defining it to be the same as ISO may be * the best option. */ ! YEAR("Year", YEARS, FOREVER, ValueRange.of(Year.MIN_VALUE, Year.MAX_VALUE)), /** * The era. * <p> * This represents the concept of the era, which is the largest division of the time-line. * This field is typically used with {@link #YEAR_OF_ERA}. --- 459,469 ---- * and increasingly negative for the earlier era. * If the calendar system has more than two eras, then the proleptic-year value may be * defined with any appropriate value, although defining it to be the same as ISO may be * the best option. */ ! YEAR("Year", YEARS, FOREVER, ValueRange.of(Year.MIN_VALUE, Year.MAX_VALUE), "year"), /** * The era. * <p> * This represents the concept of the era, which is the largest division of the time-line. * This field is typically used with {@link #YEAR_OF_ERA}.
*** 461,471 **** * Non-ISO calendar systems should implement this field to define eras. * The value of the era that was active on 1970-01-01 (ISO) must be assigned the value 1. * Earlier eras must have sequentially smaller values. * Later eras must have sequentially larger values, */ ! ERA("Era", ERAS, FOREVER, ValueRange.of(0, 1)), /** * The instant epoch-seconds. * <p> * This represents the concept of the sequential count of seconds where * 1970-01-01T00:00Z (ISO) is zero. --- 476,486 ---- * Non-ISO calendar systems should implement this field to define eras. * The value of the era that was active on 1970-01-01 (ISO) must be assigned the value 1. * Earlier eras must have sequentially smaller values. * Later eras must have sequentially larger values, */ ! ERA("Era", ERAS, FOREVER, ValueRange.of(0, 1), "era"), /** * The instant epoch-seconds. * <p> * This represents the concept of the sequential count of seconds where * 1970-01-01T00:00Z (ISO) is zero.
*** 497,521 **** --- 512,561 ---- private final String name; private final TemporalUnit baseUnit; private final TemporalUnit rangeUnit; private final ValueRange range; + private final String displayNameKey; private ChronoField(String name, TemporalUnit baseUnit, TemporalUnit rangeUnit, ValueRange range) { this.name = name; this.baseUnit = baseUnit; this.rangeUnit = rangeUnit; this.range = range; + this.displayNameKey = null; + } + + private ChronoField(String name, TemporalUnit baseUnit, TemporalUnit rangeUnit, + ValueRange range, String displayNameKey) { + this.name = name; + this.baseUnit = baseUnit; + this.rangeUnit = rangeUnit; + this.range = range; + this.displayNameKey = displayNameKey; } //----------------------------------------------------------------------- @Override public String getName() { return name; } @Override + public String getDisplayName(Locale locale) { + Objects.requireNonNull(locale, "locale"); + if (displayNameKey == null) { + return getName(); + } + + LocaleResources lr = LocaleProviderAdapter.getResourceBundleBased() + .getLocaleResources(locale); + ResourceBundle rb = lr.getJavaTimeFormatData(); + String key = "field." + displayNameKey; + return rb.containsKey(key) ? rb.getString(key) : getName(); + } + + @Override public TemporalUnit getBaseUnit() { return baseUnit; } @Override
*** 546,568 **** } //----------------------------------------------------------------------- /** * Checks if this field represents a component of a date. * * @return true if it is a component of a date */ ! public boolean isDateField() { return ordinal() >= DAY_OF_WEEK.ordinal() && ordinal() <= ERA.ordinal(); } /** * Checks if this field represents a component of a time. * * @return true if it is a component of a time */ ! public boolean isTimeField() { return ordinal() < DAY_OF_WEEK.ordinal(); } //----------------------------------------------------------------------- /** --- 586,614 ---- } //----------------------------------------------------------------------- /** * Checks if this field represents a component of a date. + * <p> + * Fields from day-of-week to era are date-based. * * @return true if it is a component of a date */ ! @Override ! public boolean isDateBased() { return ordinal() >= DAY_OF_WEEK.ordinal() && ordinal() <= ERA.ordinal(); } /** * Checks if this field represents a component of a time. + * <p> + * Fields from nano-of-second to am-pm-of-day are time-based. * * @return true if it is a component of a time */ ! @Override ! public boolean isTimeBased() { return ordinal() < DAY_OF_WEEK.ordinal(); } //----------------------------------------------------------------------- /**