public class SaxonDuration
extends javax.xml.datatype.Duration
DurationValue
.
The JAXP specification for this class defines it in terms of XML Schema 1.0 semantics. This defines a structure with six independent components (year, month, day, hour, minute, second). This implementation is more aligned to the XPath 2.0 semantics of the data type, which essentially defines duration as an integer number of months plus a decimal number of seconds.
Constructor and Description |
---|
SaxonDuration(DurationValue duration)
Create a SaxonDuration that wraps a supplied DurationValue
|
Modifier and Type | Method and Description |
---|---|
javax.xml.datatype.Duration |
add(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is
this+rhs . |
void |
addTo(java.util.Calendar calendar)
Adds this duration to a
Calendar object. |
int |
compare(javax.xml.datatype.Duration rhs)
Partial order relation comparison with this
Duration instance. |
DurationValue |
getDurationValue()
Get the underlying DurationValue
|
java.lang.Number |
getField(javax.xml.datatype.DatatypeConstants.Field field)
Gets the value of a field.
|
int |
getSign()
Returns the sign of this duration in -1,0, or 1.
|
javax.xml.namespace.QName |
getXMLSchemaType()
Get the type of this duration, as one of the values xs:duration, xs:dayTimeDuration, or
xs:yearMonthDuration.
|
int |
hashCode()
Returns a hash code consistent with the definition of the equals method.
|
boolean |
isSet(javax.xml.datatype.DatatypeConstants.Field field)
Checks if a field is set.
|
javax.xml.datatype.Duration |
multiply(java.math.BigDecimal factor)
Computes a new duration whose value is
factor times
longer than the value of this duration. |
javax.xml.datatype.Duration |
negate()
Returns a new
Duration object whose
value is -this . |
javax.xml.datatype.Duration |
normalizeWith(java.util.Calendar startTimeInstant)
Converts the years and months fields into the days field
by using a specific time instant as the reference point.
|
javax.xml.datatype.Duration |
subtract(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is
this-rhs . |
public SaxonDuration(DurationValue duration)
duration
- the value to be wrapped.public DurationValue getDurationValue()
public javax.xml.namespace.QName getXMLSchemaType()
getXMLSchemaType
in class javax.xml.datatype.Duration
public int getSign()
getSign
in class javax.xml.datatype.Duration
public java.lang.Number getField(javax.xml.datatype.DatatypeConstants.Field field)
Fields of a duration object may contain arbitrary large value.
Therefore this method is designed to return a Number
object.
In case of YEARS, MONTHS, DAYS, HOURS, and MINUTES, the returned number will be a non-negative integer. In case of seconds, the returned number may be a non-negative decimal value.
The Saxon implementation of duration uses normalized values. This means that the YEARS and DAYS fields may be arbitrarily large, but other components will be limited in size: for example MINUTES will never exceed 60 and MONTHS will never exceed 12.
getField
in class javax.xml.datatype.Duration
field
- one of the six Field constants (YEARS, MONTHS, DAYS, HOURS,
MINUTES, or SECONDS.)Number
object that
represents its value. If it is not present, return null.
For YEARS, MONTHS, DAYS, HOURS, and MINUTES, this method
returns a BigInteger
object. For SECONDS, this
method returns a BigDecimal
.java.lang.NullPointerException
- If the field
is null
.public boolean isSet(javax.xml.datatype.DatatypeConstants.Field field)
isSet
in class javax.xml.datatype.Duration
field
- one of the six Field constants (YEARS, MONTHS, DAYS, HOURS,
MINUTES, or SECONDS.)public javax.xml.datatype.Duration add(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is this+rhs
.
This implementation follows the XPath semantics. This means that the operation will fail if the duration is not a yearMonthDuration or a dayTimeDuration
add
in class javax.xml.datatype.Duration
rhs
- Duration
to add to this Duration
java.lang.NullPointerException
- If the rhs parameter is null.java.lang.IllegalStateException
- If the durations are not both dayTimeDurations, or
both yearMonthDurations.subtract(javax.xml.datatype.Duration)
public javax.xml.datatype.Duration subtract(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is this-rhs
.
This implementation follows the XPath semantics. This means that the operation will fail if the duration is not a yearMonthDuration or a dayTimeDuration.
subtract
in class javax.xml.datatype.Duration
rhs
- Duration
to subtract from this Duration
java.lang.NullPointerException
- If the rhs parameter is null.java.lang.IllegalStateException
- If the durations are not both dayTimeDurations, or
both yearMonthDurations.add(javax.xml.datatype.Duration)
public void addTo(java.util.Calendar calendar)
Calendar
object.
Calls Calendar.add(int, int)
in the
order of YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, and MILLISECONDS
if those fields are present. Because the Calendar
class
uses int to hold values, there are cases where this method
won't work correctly (for example if values of fields
exceed the range of int.)
Also, since this duration class is a Gregorian duration, this
method will not work correctly if the given Calendar
object is based on some other calendar systems.
Any fractional parts of this Duration
object
beyond milliseconds will be simply ignored. For example, if
this duration is "P1.23456S", then 1 is added to SECONDS,
234 is added to MILLISECONDS, and the rest will be unused.
Note that because Calendar.add(int, int)
is using
int, Duration
with values beyond the
range of int in its fields
will cause overflow/underflow to the given Calendar
.
XMLGregorianCalendar.add(javax.xml.datatype.Duration)
provides the same
basic operation as this method while avoiding
the overflow/underflow issues.
addTo
in class javax.xml.datatype.Duration
calendar
- A calendar object whose value will be modified.java.lang.NullPointerException
- if the calendar parameter is null.public javax.xml.datatype.Duration multiply(java.math.BigDecimal factor)
factor
times
longer than the value of this duration.
This implementation follows the XPath semantics. This means that it is defined only on yearMonthDuration and dayTimeDuration. Other cases produce an IllegalStateException.
multiply
in class javax.xml.datatype.Duration
factor
- to multiply byDuration
objectjava.lang.IllegalStateException
- if operation produces fraction in
the months field.java.lang.NullPointerException
- if the factor
parameter is
null
.public javax.xml.datatype.Duration negate()
Duration
object whose
value is -this
.
Since the Duration
class is immutable, this method
doesn't change the value of this object. It simply computes
a new Duration object and returns it.
negate
in class javax.xml.datatype.Duration
Duration
object.public javax.xml.datatype.Duration normalizeWith(java.util.Calendar startTimeInstant)
Converts the years and months fields into the days field by using a specific time instant as the reference point.
This implementation does not support this method
normalizeWith
in class javax.xml.datatype.Duration
startTimeInstant
- Calendar
reference point.Duration
of years and months of this Duration
as days.java.lang.NullPointerException
- If the startTimeInstant parameter is null.java.lang.UnsupportedOperationException
- Always thrown by this implementation.public int compare(javax.xml.datatype.Duration rhs)
Partial order relation comparison with this Duration
instance.
This implementation follows the XPath semantics. This means that the result is defined only for dayTimeDuration and yearMonthDuration values, and the result is never indeterminate.
Return:
DatatypeConstants.LESSER
if this Duration
is shorter than duration
parameterDatatypeConstants.EQUAL
if this Duration
is equal to duration
parameterDatatypeConstants.GREATER
if this Duration
is longer than duration
parameterDatatypeConstants.INDETERMINATE
if a conclusive partial order relation cannot be determinedcompare
in class javax.xml.datatype.Duration
rhs
- duration to comparethis
Duration
and duration
parameter as
DatatypeConstants.LESSER
,
DatatypeConstants.EQUAL
,
DatatypeConstants.GREATER
or DatatypeConstants.INDETERMINATE
.java.lang.UnsupportedOperationException
- If the underlying implementation
cannot reasonably process the request, e.g. W3C XML Schema allows for
arbitrarily large/small/precise values, the request may be beyond the
implementations capability.java.lang.NullPointerException
- if duration
is null
.java.lang.IllegalArgumentException
- if the operands are not dayTimeDuration or yearMonthDuration values.Duration.isShorterThan(javax.xml.datatype.Duration)
,
Duration.isLongerThan(javax.xml.datatype.Duration)
public int hashCode()
hashCode
in class javax.xml.datatype.Duration
Object.hashCode()
Copyright (c) 2004-2020 Saxonica Limited. All rights reserved.