U - generic type of time units compatible to ChronoUnitT - generic type of self referencepublic abstract class TimePoint<U,T extends TimePoint<U,T>> extends ChronoEntity<T> implements Comparable<T>, Serializable
Represents an immutable time point along a time axis which is directed into the future.
Display and change chronological element values
The time point consists of chronological elements. This base class
delegates the time arithmetic to the associated time axis respective to
the underlying rules of elements and units. However, any concrete subclass
is required to define the state and reflect it in all get()-methods
and also to specify the serialization behaviour.
Element values can only be changed by creating a new immutable copy
of the original instance. This is done via all with()-methods.
Time axis
If the referenced time axis is the UTC-timeline (that is a time point
is defined relative to the start of UTC epoch - see
package summary) then any implementation
must also implement the interface UniversalTime.
In every other case we have a local time axis. All time units are to be
defined referencing the time axis. For example, second units are interpreted
as local UT1-seconds on a local timestamp but on a UniversalTime
before 1972 as global UT1-seconds and after 1972 as atomic SI-seconds.
Hence Time4J has even defined different second units in the main package.
Applications should therefore take much care if they transform a duration
from one time axis to another one.
Sorting
Unless explicitly stated otherwise sorting of time points is always
in strict temporal order and consistent with equals(). In case
of doubt the documentation of the subclass is leading. Alternatively,
subclasses are free to implement the interface Temporal to
enable a temporal order.
Addition (or subtraction) of a time span to a time point
These operations are performed by all plus()- and minus()-
methods. A time span can either be a single time unit, or it consists of
several time units.
If given time unit does not have a fixed length (for example months) then the result of an addition can deviate from the expected element value to be considered. In case of multiple additions care is required. In case of doubt the original value should be saved for a later addition. Example with additions of months in one or two steps (pseudo-code):
Difference of time points
The difference of time points results in a time span. The result can either be expressed in one time unit only, or in multiple units which represent the base unit of associated chronological element. In latter case users have to define a metric, too.
Implementation notes
equals(). Chronology,
TimeAxis,
Temporal| Constructor and Description |
|---|
TimePoint() |
| Modifier and Type | Method and Description |
|---|---|
abstract int |
compareTo(T timePoint)
Compares two time points preferably by their temporal positions
on the common time axis.
|
abstract boolean |
equals(Object obj)
Compares the whole state of this instance with given object.
|
abstract int |
hashCode()
Subclasses must redefine this method corresponding to the
behaviour of
equals(). |
static <U,T extends TimePoint<U,T>> |
max(T t1,
T t2)
Determines the maximum of both time points.
|
static <U,T extends TimePoint<U,T>> |
min(T t1,
T t2)
Determines the minimum of both time points.
|
T |
minus(long amount,
U unit)
Subtracts given amount in units from this time point and
yields the result of subtraction.
|
T |
minus(TimeSpan<? extends U> timeSpan)
Subtracts given time span from this time point and yields
the result of subtraction.
|
T |
plus(long amount,
U unit)
Adds given amount in units to this time point and yields the
result of addition.
|
T |
plus(TimeSpan<? extends U> timeSpan)
Adds the given time span to this time point and yields
the result of the addition.
|
abstract String |
toString()
Provides a complete textual representation of the state of
this time point.
|
<P> P |
until(T end,
TimeMetric<? extends U,P> metric)
Calculates the (most normalized) time span between this time point
and given end time point using the given metric.
|
long |
until(T end,
U unit)
Calculates the temporal distance between this time point and
given end time point in only one time unit.
|
contains, get, get, getMaximum, getMinimum, getTimezone, hasTimezone, isValid, isValid, isValid, matches, with, with, with, withpublic abstract int compareTo(T timePoint)
Compares two time points preferably by their temporal positions on the common time axis.
Implementation note: In order to make the natural order consistent
with equals() the whole state must be taken into account,
with preference for those attributes which define the temporal
position on the time axis.
compareTo in interface Comparable<T extends TimePoint<U,T>>equals(Object)public T plus(TimeSpan<? extends U> timeSpan)
Adds the given time span to this time point and yields the result of the addition.
Delegates to TimeSpan.addTo(TimePoint).
timeSpan - time span to be added to this instanceRuleNotFoundException - if any time unit is not registered
and does also not implement BasicUnit to yield
a suitable unit rule for the underlying time axisArithmeticException - in case of numerical overflowminus(TimeSpan)public T minus(TimeSpan<? extends U> timeSpan)
Subtracts given time span from this time point and yields the result of subtraction.
Delegiert an TimeSpan.subtractFrom(TimePoint).
timeSpan - time span to be subtracted from this instanceRuleNotFoundException - if any time unit is not registered
and does also not implement BasicUnit to yield
a suitable unit rule for the underlying time axisArithmeticException - in case of numerical overflowplus(TimeSpan)public T plus(long amount, U unit)
Adds given amount in units to this time point and yields the result of addition.
Similar to plus(TimeSpan) but with the difference
that the timespan is only given in one single time unit. Example
in pseudo-code:
amount - amount to be added (maybe negative)unit - time unitRuleNotFoundException - if given time unit is not registered
and does also not implement BasicUnit to yield
a suitable unit rule for the underlying time axisArithmeticException - in case of numerical overflowplus(TimeSpan)public T minus(long amount, U unit)
Subtracts given amount in units from this time point and yields the result of subtraction.
amount - amount to be subtracted (maybe negative)unit - time unitRuleNotFoundException - if given time unit is not registered
and does also not implement BasicUnit to yield
a suitable unit rule for the underlying time axisArithmeticException - in case of numerical overflowplus(long, U)public <P> P until(T end, TimeMetric<? extends U,P> metric)
Calculates the (most normalized) time span between this time point and given end time point using the given metric.
P - generic type of time span resultend - end time pointmetric - temporal distance metricArithmeticException - in case of numerical overflowpublic long until(T end, U unit)
Calculates the temporal distance between this time point and given end time point in only one time unit.
Similar to until(TimePoint, TimeMetric) but with the
difference that the time span is onyl calculated in one time unit
as long-primitive. In many cases a remainder of subtraction will
be left if given unit is not the smallest possible unit. Time points
whose element values differ less than one base unit will be
considered as equal. Examples in pseudo-code:
end - end time pointunit - time unitRuleNotFoundException - if given time unit is not registered
and does also not implement BasicUnit to yield
a suitable unit rule for the underlying time axisArithmeticException - in case of numerical overflowuntil(TimePoint, TimeMetric)public static <U,T extends TimePoint<U,T>> T min(T t1, T t2)
Determines the minimum of both time points.
U - generic type of time units compatible to ChronoUnitT - generic type of self referencet1 - first time pointt2 - second time pointpublic static <U,T extends TimePoint<U,T>> T max(T t1, T t2)
Determines the maximum of both time points.
U - generic type of time units compatible to ChronoUnitT - generic type of self referencet1 - first time pointt2 - second time pointpublic abstract boolean equals(Object obj)
Compares the whole state of this instance with given object.
Implementations will usually define their state only based on the temporal position on the time axis because this is the most intuitive approach. Exceptions from this rule should be explicitly documented and reasoned.
equals in class ObjectcompareTo(TimePoint)public abstract int hashCode()
Subclasses must redefine this method corresponding to the
behaviour of equals().
public abstract String toString()
Provides a complete textual representation of the state of this time point.
The textual description often follows the conventions of ISO-8601. Usually the description starts with the chronological informations which are coarse-grained and ends with those ones which are fine-grained (for example the ISO-notation YYYY-MM-DD).
Copyright © 2014–2015. All rights reserved.