The java.time classes use the Java time-scale for simplicity.
That scale works on the assumption that the time-line is simple, there are no leap-seconds
and there are always 24 * 60 * 60 seconds in a day. Unfortunately, the Earth's rotation
is not straightforward, and a solar day does not match this definition.
This class is an alternative representation based on the UTC time-scale which
includes leap-seconds. Leap-seconds are additional seconds that are inserted into the
year-month-day-hour-minute-second time-line in order to keep UTC in line with the solar day.
When a leap second occurs, an accurate clock will show the time 23:59:60 just before midnight.
Leap-seconds are announced in advance, typically at least six months.
The UtcRules class models which dates have leap-seconds.
All the methods on this class use the latest available system rules.
The system leap-second rules fix the start point of UTC as 1972. This date was chosen as UTC was more complex before 1972.
The duration between two points on the UTC time-scale is calculated solely using this class.
Do not use the between method on Duration as that will lose information.
Instead use durationUntil(UtcInstant) on this class.
It is intended that most applications will use the Instant class
which uses the UTC-SLS mapping from UTC to guarantee 86400 seconds per day.
Specialist applications with access to an accurate time-source may find this class useful.
The length of the solar day is the standard way that humans measure time. As the Earth's rotation changes, the length of the day varies. In general, a solar day is slightly longer than 86400 SI seconds. The actual length is not predictable and can only be determined by measurement. The UT1 time-scale captures these measurements.
The UTC time-scale is a standard approach to bundle up all the additional fractions
of a second from UT1 into whole seconds, known as leap-seconds.
A leap-second may be added or removed depending on the Earth's rotational changes.
If it is removed, then the relevant date will have no time of 23:59:59.
If it is added, then the relevant date will have an extra second of 23:59:60.
The modern UTC time-scale was introduced in 1972, introducing the concept of whole leap-seconds. Between 1958 and 1972, the definition of UTC was complex, with minor sub-second leaps and alterations to the length of the notional second.
This class may be used for instants in the far past and far future. Since some instants will be prior to 1972, it is not strictly an implementation of UTC. Instead, it is a proleptic time-scale based on TAI and equivalent to it since 1972.
This class must be treated as a value type. Do not synchronize, rely on the identity hash code or use the distinction between equals() and ==.
| Modifier and Type | Field and Description |
|---|---|
| private final long | mjDay
The Modified Julian Day, from the epoch of 1858-11-17. |
| private final long | nanoOfDay
The number of nanoseconds, later along the time-line, from the MJD field. |
| private static final long | serialVersionUID
Serialization version. |
| private transient String | toString
A cache of the result from |
| Access | Constructor and Description |
|---|---|
| private | UtcInstant(long
the date as a Modified Julian Day (number of days from the epoch of 1858-11-17) mjDay, long the nanoseconds within the day, including leap seconds nanoOfDay)Constructs an instance. |
| Modifier and Type | Method and Description |
|---|---|
| private String | |
| public int | Returns: the comparator value, negative if less, positive if greaterthe other instant to compare to, not null otherInstant)Implements java. Compares this instant to another based on the time-line. |
| public Duration | Returns: the duration until the specified instant, may be negative, not nullthe instant to calculate the duration until, not null utcInstant)Returns the duration between this instant and the specified instant. |
| public boolean | Returns: true if the other instant is equal to this onethe other instant, null returns false otherInstant)Overrides java. Checks if this instant is equal to the specified |
| public long | Returns: the Modified Julian Day based on the epoch 1858-11-17Gets the Modified Julian Day (MJD). |
| public long | Returns: the nanoseconds within the day, including leap secondsGets the number of nanoseconds, later along the time-line, from the start of the Modified Julian Day. |
| public int | Returns: a suitable hash codeOverrides java. Returns a hash code for this instant. |
| public boolean | Returns: true if this instant is after the specified instantthe other instant to compare to, not null otherInstant)Checks if this instant is after the specified instant. |
| public boolean | Returns: true if this instant is before the specified instantthe other instant to compare to, not null otherInstant)Checks if this instant is before the specified instant. |
| public boolean | Returns: true if this instant is within a leap secondChecks if the instant is within a leap second. |
| public UtcInstant | |
| public static UtcInstant | |
| public static UtcInstant | Returns: the UTC instant, not nullthe instant to convert, not null instant)Obtains an instance of |
| public static UtcInstant | Returns: the UTC instant, not nullthe date as a Modified Julian Day (number of days from the epoch of 1858-11-17) mjDay, long the nanoseconds within the day, including leap seconds nanoOfDay)Obtains an instance of |
| public static UtcInstant | Returns: the parsed instant, not nullthe text to parse such as "2007-12-03T10:15:30.00Z", not null text)Obtains an instance of |
| public UtcInstant | |
| public Instant | Returns: anInstant representing the best approximation of this instant, not nullConverts this instant to an |
| public String | Returns: a representation of this instant, not nullOverrides java. A string representation of this instant. |
| public TaiInstant | Returns: aTaiInstant representing the same instant, not nullConverts this instant to a |
| public UtcInstant | Returns: aUtcInstant based on this instant with the requested day, not nullthe date as a Modified Julian Day (number of days from the epoch of 1858-11-17) mjDay)Returns a copy of this |
| public UtcInstant | Returns: aUtcInstant based on this instant with the requested nano-of-day, not nullthe nanoseconds within the day, including leap seconds nanoOfDay)Returns a copy of this |
| mjDay | back to summary |
|---|---|
| private final long mjDay The Modified Julian Day, from the epoch of 1858-11-17. | |
| nanoOfDay | back to summary |
|---|---|
| private final long nanoOfDay The number of nanoseconds, later along the time-line, from the MJD field. This is always positive and includes leap seconds. | |
| serialVersionUID | back to summary |
|---|---|
| private static final long serialVersionUID Serialization version. | |
| toString | back to summary |
|---|---|
| private transient String toString A cache of the result from | |
| UtcInstant | back to summary |
|---|---|
| private UtcInstant(long mjDay, long nanoOfDay) Constructs an instance.
| |
| buildToString | back to summary |
|---|---|
| private String buildToString() | |
| compareTo | back to summary |
|---|---|
| public int compareTo(UtcInstant otherInstant) Implements java. Compares this instant to another based on the time-line.
The comparison is based first on the Modified Julian Day, then on the nano-of-day.
It is "consistent with equals", as defined by
| |
| durationUntil | back to summary |
|---|---|
| public Duration durationUntil(UtcInstant utcInstant) Returns the duration between this instant and the specified instant.
This calculates the duration between this instant and another based on
the UTC time-scale. Any leap seconds that occur will be included in the duration.
Adding the duration to this instant using
| |
| equals | back to summary |
|---|---|
| public boolean equals(Object otherInstant) Overrides java. Checks if this instant is equal to the specified The comparison is based on the Modified Julian Day, then on the nano-of-day. | |
| getModifiedJulianDay | back to summary |
|---|---|
| public long getModifiedJulianDay() Gets the Modified Julian Day (MJD).
The Modified Julian Day is a simple incrementing count of days where day 0 is 1858-11-17.
The nanosecond part of the day is returned by
| |
| getNanoOfDay | back to summary |
|---|---|
| public long getNanoOfDay() Gets the number of nanoseconds, later along the time-line, from the start of the Modified Julian Day.
The nanosecond-of-day value measures the total number of nanoseconds within
the day from the start of the day returned by
| |
| hashCode | back to summary |
|---|---|
| public int hashCode() Overrides java. Returns a hash code for this instant.
| |
| isAfter | back to summary |
|---|---|
| public boolean isAfter(UtcInstant otherInstant) Checks if this instant is after the specified instant. The comparison is based on the time-line position of the instants.
| |
| isBefore | back to summary |
|---|---|
| public boolean isBefore(UtcInstant otherInstant) Checks if this instant is before the specified instant. The comparison is based on the time-line position of the instants.
| |
| isLeapSecond | back to summary |
|---|---|
| public boolean isLeapSecond() Checks if the instant is within a leap second. This method returns true when an accurate clock would return a seconds field of 60.
| |
| minus | back to summary |
|---|---|
| public UtcInstant minus(Duration duration) Returns a copy of this instant with the specified duration subtracted. The duration is subtracted using simple subtraction of the seconds and nanoseconds in the duration from the seconds and nanoseconds of this instant. As a result, the duration is treated as being measured in TAI compatible seconds for the purpose of this method. This instance is immutable and unaffected by this method call.
| |
| of | back to summary |
|---|---|
| public static UtcInstant of(Instant instant) Obtains an instance of Converting a UTC-SLS instant to UTC requires leap second rules. This method uses the latest available system rules.
Conversion from an
| |
| of | back to summary |
|---|---|
| public static UtcInstant of(TaiInstant instant) Obtains an instance of Converting a TAI instant to UTC requires leap second rules. This method uses the latest available system rules.
The
| |
| ofModifiedJulianDay | back to summary |
|---|---|
| public static UtcInstant ofModifiedJulianDay(long mjDay, long nanoOfDay) Obtains an instance of Modified Julian Day is a simple incrementing count of days where day 0 is 1858-11-17. Nanosecond-of-day is a simple count of nanoseconds from the start of the day including any additional leap-second. This method validates the nanosecond-of-day value against the Modified Julian Day.
The nanosecond-of-day value has a valid range from
The nanosecond value must be positive even for negative values of Modified
Julian Day. One nanosecond before Modified Julian Day zero will be
| |
| parse | back to summary |
|---|---|
| public static UtcInstant parse(CharSequence text) Obtains an instance of
The string must represent a valid instant in UTC and is parsed using
| |
| plus | back to summary |
|---|---|
| public UtcInstant plus(Duration duration) Returns a copy of this instant with the specified duration added. The duration is added using simple addition of the seconds and nanoseconds in the duration to the seconds and nanoseconds of this instant. As a result, the duration is treated as being measured in TAI compatible seconds for the purpose of this method. This instance is immutable and unaffected by this method call.
| |
| toInstant | back to summary |
|---|---|
| public Instant toInstant() Converts this instant to an Converting a UTC instant to UTC-SLS requires leap second rules. This method uses the latest available system rules.
Conversion to an
| |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. A string representation of this instant. The string is formatted using ISO-8601. The output includes seconds, 9 nanosecond digits and a trailing 'Z'. The time-of-day will be 23:59:60 during a positive leap second. | |
| toTaiInstant | back to summary |
|---|---|
| public TaiInstant toTaiInstant() Converts this instant to a Converting a UTC instant to TAI requires leap second rules. This method uses the latest available system rules.
The
| |
| withModifiedJulianDay | back to summary |
|---|---|
| public UtcInstant withModifiedJulianDay(long mjDay) Returns a copy of this
The Modified Julian Day is a simple incrementing count of days where day 0 is 1858-11-17.
The nanosecond part of the day is returned by This instance is immutable and unaffected by this method call.
| |
| withNanoOfDay | back to summary |
|---|---|
| public UtcInstant withNanoOfDay(long nanoOfDay) Returns a copy of this
The nanosecond-of-day value measures the total number of nanoseconds within
the day from the start of the day returned by This instance is immutable and unaffected by this method call.
| |