This class defines fields and units that are specific to the ISO calendar system.
January, February and March are in Q1. April, May and June are in Q2. July, August and September are in Q3. October, November and December are in Q4.
The complete date is expressed using three fields:
DAY_OF_QUARTER
- the day within the quarter, from 1 to 90, 91 or 92
QUARTER_OF_YEAR
- the quarter within the year, from 1 to 4
YEAR
- the standard ISO year
The date is expressed using three fields:
DAY_OF_WEEK
- the standard field defining the
day-of-week from Monday (1) to Sunday (7)
WEEK_OF_WEEK_BASED_YEAR
- the week within the week-based-year
WEEK_BASED_YEAR
- the week-based-year
The first week of a week-based-year is the first Monday-based week of the standard ISO year that has at least 4 days in the new year.
For example:
Date | Day-of-week | Field values |
---|---|---|
2008-12-28 | Sunday | Week 52 of week-based-year 2008 |
2008-12-29 | Monday | Week 1 of week-based-year 2009 |
2008-12-31 | Wednesday | Week 1 of week-based-year 2009 |
2009-01-01 | Thursday | Week 1 of week-based-year 2009 |
2009-01-04 | Sunday | Week 1 of week-based-year 2009 |
2009-01-05 | Monday | Week 2 of week-based-year 2009 |
Implementation Specification
This class is immutable and thread-safe.
Modifier and Type | Class and Description |
---|---|
private static enum | IsoFields.
Implementation of the field. |
private static enum | IsoFields.
Implementation of the unit. |
Modifier and Type | Field and Description |
---|---|
public static final TemporalField | DAY_OF_QUARTER
The field that represents the day-of-quarter. |
public static final TemporalField | QUARTER_OF_YEAR
The field that represents the quarter-of-year. |
public static final TemporalUnit | QUARTER_YEARS
Unit that represents the concept of a quarter-year. |
public static final TemporalField | WEEK_BASED_YEAR
The field that represents the week-based-year. |
public static final TemporalUnit | WEEK_BASED_YEARS
The unit that represents week-based-years for the purpose of addition and subtraction. |
public static final TemporalField | WEEK_OF_WEEK_BASED_YEAR
The field that represents the week-of-week-based-year. |
Access | Constructor and Description |
---|---|
private |
Modifier and Type | Method and Description |
---|---|
private static void | |
private static boolean |
DAY_OF_QUARTER | back to summary |
---|---|
public static final TemporalField DAY_OF_QUARTER The field that represents the day-of-quarter. This field allows the day-of-quarter value to be queried and set. The day-of-quarter has values from 1 to 90 in Q1 of a standard year, from 1 to 91 in Q1 of a leap year, from 1 to 91 in Q2 and from 1 to 92 in Q3 and Q4. The day-of-quarter can only be calculated if the day-of-year, month-of-year and year are available. When setting this field, the value is allowed to be partially lenient, taking any value from 1 to 92. If the quarter has less than 92 days, then day 92, and potentially day 91, is in the following quarter. In the resolving phase of parsing, a date can be created from a year, quarter-of-year and day-of-quarter. In strict mode, all three fields are validated against their range of valid values. The day-of-quarter field is validated from 1 to 90, 91 or 92 depending on the year and quarter. In smart mode, all three fields are validated against their range of valid values. The day-of-quarter field is validated between 1 and 92, ignoring the actual range based on the year and quarter. If the day-of-quarter exceeds the actual range by one day, then the resulting date is one day later. If the day-of-quarter exceeds the actual range by two days, then the resulting date is two days later. In lenient mode, only the year is validated against the range of valid values. The resulting date is calculated equivalent to the following three stage approach. First, create a date on the first of January in the requested year. Then take the quarter-of-year, subtract one, and add the amount in quarters to the date. Finally, take the day-of-quarter, subtract one, and add the amount in days to the date. This unit is an immutable and thread-safe singleton. |
QUARTER_OF_YEAR | back to summary |
---|---|
public static final TemporalField QUARTER_OF_YEAR The field that represents the quarter-of-year. This field allows the quarter-of-year value to be queried and set. The quarter-of-year has values from 1 to 4. The quarter-of-year can only be calculated if the month-of-year is available.
In the resolving phase of parsing, a date can be created from a year,
quarter-of-year and day-of-quarter.
See This unit is an immutable and thread-safe singleton. |
QUARTER_YEARS | back to summary |
---|---|
public static final TemporalUnit QUARTER_YEARS Unit that represents the concept of a quarter-year.
For the ISO calendar system, it is equal to 3 months.
The estimated duration of a quarter-year is one quarter of This unit is an immutable and thread-safe singleton. |
WEEK_BASED_YEAR | back to summary |
---|---|
public static final TemporalField WEEK_BASED_YEAR The field that represents the week-based-year. This field allows the week-based-year value to be queried and set.
The field has a range that matches
In the resolving phase of parsing, a date can be created from a
week-based-year, week-of-week-based-year and day-of-week.
See This unit is an immutable and thread-safe singleton. |
WEEK_BASED_YEARS | back to summary |
---|---|
public static final TemporalUnit WEEK_BASED_YEARS The unit that represents week-based-years for the purpose of addition and subtraction.
This allows a number of week-based-years to be added to, or subtracted from, a date.
The unit is equal to either 52 or 53 weeks.
The estimated duration of a week-based-year is the same as that of a standard ISO
year at The rules for addition add the number of week-based-years to the existing value for the week-based-year field. If the resulting week-based-year only has 52 weeks, then the date will be in week 1 of the following week-based-year. This unit is an immutable and thread-safe singleton. |
WEEK_OF_WEEK_BASED_YEAR | back to summary |
---|---|
public static final TemporalField WEEK_OF_WEEK_BASED_YEAR The field that represents the week-of-week-based-year. This field allows the week of the week-based-year value to be queried and set. The week-of-week-based-year has values from 1 to 52, or 53 if the week-based-year has 53 weeks. In the resolving phase of parsing, a date can be created from a week-based-year, week-of-week-based-year and day-of-week. In strict mode, all three fields are validated against their range of valid values. The week-of-week-based-year field is validated from 1 to 52 or 53 depending on the week-based-year. In smart mode, all three fields are validated against their range of valid values. The week-of-week-based-year field is validated between 1 and 53, ignoring the week-based-year. If the week-of-week-based-year is 53, but the week-based-year only has 52 weeks, then the resulting date is in week 1 of the following week-based-year. In lenient mode, only the week-based-year is validated against the range of valid values. If the day-of-week is outside the range 1 to 7, then the resulting date is adjusted by a suitable number of weeks to reduce the day-of-week to the range 1 to 7. If the week-of-week-based-year value is outside the range 1 to 52, then any excess weeks are added or subtracted from the resulting date. This unit is an immutable and thread-safe singleton. |
IsoFields | back to summary |
---|---|
private IsoFields() Restricted constructor. |
ensureIso | back to summary |
---|---|
private static void ensureIso(TemporalAccessor temporal) |
isIso | back to summary |
---|---|
private static boolean isIso(TemporalAccessor temporal) |
Modifier and Type | Field and Description |
---|---|
public static final IsoFields. | |
private static final int[] | |
public static final IsoFields. | |
public static final IsoFields. | |
public static final IsoFields. |
Access | Constructor and Description |
---|---|
private |
Modifier and Type | Method and Description |
---|---|
private static int | |
private static int | |
private static ValueRange | |
private static int | |
public boolean | isDateBased()
Implements java. Checks if this field represents a component of a date. |
public boolean | isTimeBased()
Implements java. Checks if this field represents a component of a time. |
public ValueRange | rangeRefinedBy(TemporalAccessor
the temporal object used to refine the result, not null temporal)Implements java. Get the range of valid values for this field using the temporal object to refine the result. |
public static IsoFields. | |
public static IsoFields. |
DAY_OF_QUARTER | back to summary |
---|---|
public static final IsoFields. |
QUARTER_DAYS | back to summary |
---|---|
private static final int[] QUARTER_DAYS |
QUARTER_OF_YEAR | back to summary |
---|---|
public static final IsoFields. |
WEEK_BASED_YEAR | back to summary |
---|---|
public static final IsoFields. |
WEEK_OF_WEEK_BASED_YEAR | back to summary |
---|---|
public static final IsoFields. |
Field | back to summary |
---|---|
private Field() |
getWeek | back to summary |
---|---|
private static int getWeek(LocalDate date) |
getWeekBasedYear | back to summary |
---|---|
private static int getWeekBasedYear(LocalDate date) |
getWeekRange | back to summary |
---|---|
private static ValueRange getWeekRange(LocalDate date) |
getWeekRange | back to summary |
---|---|
private static int getWeekRange(int wby) |
isDateBased | back to summary |
---|---|
public boolean isDateBased() Implements java. Doc from java. Checks if this field represents a component of a date.
A field is date-based if it can be derived from
|
isTimeBased | back to summary |
---|---|
public boolean isTimeBased() Implements java. Doc from java. Checks if this field represents a component of a time.
A field is time-based if it can be derived from
|
rangeRefinedBy | back to summary |
---|---|
public ValueRange rangeRefinedBy(TemporalAccessor temporal) Implements java. Doc from java. Get the range of valid values for this field using the temporal object to refine the result.
This uses the temporal object to find the range of valid values for the field.
This is similar to
There are two equivalent ways of using this method.
The first is to invoke this method directly.
The second is to use // these two lines are equivalent, but the second approach is recommended temporal = thisField.rangeRefinedBy(temporal); temporal = temporal.range(thisField);It is recommended to use the second approach, range(TemporalField) ,
as it is a lot clearer to read in code.
Implementations should perform any queries or calculations using the fields
available in
|
valueOf | back to summary |
---|---|
public static IsoFields. |
values | back to summary |
---|---|
public static IsoFields. |
Modifier and Type | Field and Description |
---|---|
private final Duration | |
private final String | name
Hides java. |
public static final IsoFields. | QUARTER_YEARS
Unit that represents the concept of a quarter-year. |
public static final IsoFields. | WEEK_BASED_YEARS
Unit that represents the concept of a week-based-year. |
Access | Constructor and Description |
---|---|
private |
Modifier and Type | Method and Description |
---|---|
public <R extends Temporal> R | addTo(R
the temporal object to adjust, not null temporal, long the amount of this unit to add, positive or negative amount)Implements java. Returns a copy of the specified temporal object with the specified period added. |
public long | between(Temporal
the base temporal object, not null temporal1Inclusive, Temporal the other temporal object, exclusive, not null temporal2Exclusive)Implements java. Calculates the amount of time between two temporal objects. |
public Duration | getDuration()
Implements java. Gets the duration of this unit, which may be an estimate. |
public boolean | isDateBased()
Implements java. Checks if this unit represents a component of a date. |
public boolean | isDurationEstimated()
Implements java. Checks if the duration of the unit is an estimate. |
public boolean | isSupportedBy(Temporal
the temporal object to check, not null temporal)Overrides default java. Checks if this unit is supported by the specified temporal object. |
public boolean | isTimeBased()
Implements java. Checks if this unit represents a component of a time. |
public String | toString()
Overrides java. Implements java. Gets a descriptive name for the unit. |
public static IsoFields. | |
public static IsoFields. |
duration | back to summary |
---|---|
private final Duration duration |
name | back to summary |
---|---|
private final String name Hides java. |
QUARTER_YEARS | back to summary |
---|---|
public static final IsoFields. Unit that represents the concept of a quarter-year. |
WEEK_BASED_YEARS | back to summary |
---|---|
public static final IsoFields. Unit that represents the concept of a week-based-year. |
Unit | back to summary |
---|---|
private Unit(String name, Duration estimatedDuration) |
addTo | back to summary |
---|---|
public <R extends Temporal> R addTo(R temporal, long amount) Implements java. Doc from java. Returns a copy of the specified temporal object with the specified period added. The period added is a multiple of this unit. For example, this method could be used to add "3 days" to a date by calling this method on the instance representing "days", passing the date and the period "3". The period to be added may be negative, which is equivalent to subtraction.
There are two equivalent ways of using this method.
The first is to invoke this method directly.
The second is to use // these two lines are equivalent, but the second approach is recommended temporal = thisUnit.addTo(temporal); temporal = temporal.plus(thisUnit);It is recommended to use the second approach, plus(TemporalUnit) ,
as it is a lot clearer to read in code.
Implementations should perform any queries or calculations using the units
available in Implementations must not alter the specified temporal object. Instead, an adjusted copy of the original must be returned. This provides equivalent, safe behavior for immutable and mutable implementations.
|
between | back to summary |
---|---|
public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) Implements java. Doc from java. Calculates the amount of time between two temporal objects.
This calculates the amount in terms of this unit. The start and end
points are supplied as temporal objects and must be of compatible types.
The implementation will convert the second type to be an instance of the
first type before the calculating the amount.
The result will be negative if the end is before the start.
For example, the amount in hours between two temporal objects can be
calculated using The calculation returns a whole number, representing the number of complete units between the two temporals. For example, the amount in hours between the times 11:30 and 13:29 will only be one hour as it is one minute short of two hours.
There are two equivalent ways of using this method.
The first is to invoke this method directly.
The second is to use // these two lines are equivalent between = thisUnit.between(start, end); between = start.until(end, thisUnit);The choice should be made based on which makes the code more readable. For example, this method allows the number of days between two dates to be calculated: long daysBetween = DAYS.between(start, end); // or alternatively long daysBetween = start.until(end, DAYS);
Implementations should perform any queries or calculations using the units
available in
|
getDuration | back to summary |
---|---|
public Duration getDuration() Implements java. Doc from java. Gets the duration of this unit, which may be an estimate.
All units return a duration measured in standard nanoseconds from this method.
The duration will be positive and non-zero.
For example, an hour has a duration of
Some units may return an accurate duration while others return an estimate.
For example, days have an estimated duration due to the possibility of
daylight saving time changes.
To determine if the duration is an estimate, use |
isDateBased | back to summary |
---|---|
public boolean isDateBased() Implements java. Doc from java. Checks if this unit represents a component of a date.
A date is time-based if it can be used to imply meaning from a date.
It must have a duration that is an integral
multiple of the length of a standard day.
Note that it is valid for both
|
isDurationEstimated | back to summary |
---|---|
public boolean isDurationEstimated() Implements java. Doc from java. Checks if the duration of the unit is an estimate. All units have a duration, however the duration is not always accurate. For example, days have an estimated duration due to the possibility of daylight saving time changes. This method returns true if the duration is an estimate and false if it is accurate. Note that accurate/estimated ignores leap seconds.
|
isSupportedBy | back to summary |
---|---|
public boolean isSupportedBy(Temporal temporal) Overrides default java. Doc from java. Checks if this unit is supported by the specified temporal object. This checks that the implementing date-time can add/subtract this unit. This can be used to avoid throwing an exception.
This default implementation derives the value using
|
isTimeBased | back to summary |
---|---|
public boolean isTimeBased() Implements java. Doc from java. Checks if this unit represents a component of a time.
A unit is time-based if it can be used to imply meaning from a time.
It must have a duration that divides into
the length of a standard day without remainder.
Note that it is valid for both
|
toString | back to summary |
---|---|
public String toString() Overrides java. Implements java. Doc from java. Gets a descriptive name for the unit. This should be in the plural and upper-first camel case, such as 'Days' or 'Minutes'. |
valueOf | back to summary |
---|---|
public static IsoFields. |
values | back to summary |
---|---|
public static IsoFields. |