net.sf.saxon.xqj
Class SaxonXMLGregorianCalendar

java.lang.Object
  extended by javax.xml.datatype.XMLGregorianCalendar
      extended by net.sf.saxon.xqj.SaxonXMLGregorianCalendar
All Implemented Interfaces:
Cloneable

public class SaxonXMLGregorianCalendar
extends XMLGregorianCalendar

Saxon implementation of the JAXP class javax.xml.datatype.XMLGregorianCalendar. This is currently used only by the XQJ interface for XQuery: the normal representation of a date, time, or dateTime value in Saxon is with a subclass of CalendarValue

The JAXP specification for this class defines it in terms of XML Schema 1.0 semantics. This implementation is more aligned to the XPath 2.0 semantics of the data types.

Note that this class, unlike the representations of all other data types, is mutable.


Constructor Summary
SaxonXMLGregorianCalendar(CalendarValue value)
          Create a SaxonXMLGregorianCalendar from a Saxon CalendarValue object
 
Method Summary
 void add(Duration duration)
          Add duration to this instance.
 void clear()
          Unset all fields to undefined.
 Object clone()
          Creates and returns a copy of this object.
 int compare(XMLGregorianCalendar xmlGregorianCalendar)
          Compare two instances of W3C XML Schema 1.0 date/time datatypes according to partial order relation defined in W3C XML Schema 1.0 Part 2, Section 3.2.7.3, Order relation on dateTime.
 int getDay()
          Return day in month or DatatypeConstants.FIELD_UNDEFINED.
 BigInteger getEon()
          Return high order component for XML Schema 1.0 dateTime datatype field for year.
 BigInteger getEonAndYear()
          Return XML Schema 1.0 dateTime datatype field for year.
 BigDecimal getFractionalSecond()
          Return fractional seconds.
 int getHour()
          Return hours or DatatypeConstants.FIELD_UNDEFINED.
 int getMicrosecond()
          Return microsecond precision of getFractionalSecond().
 int getMinute()
          Return minutes or DatatypeConstants.FIELD_UNDEFINED.
 int getMonth()
          Return number of month or DatatypeConstants.FIELD_UNDEFINED.
 int getSecond()
          Return seconds or DatatypeConstants.FIELD_UNDEFINED.
 int getTimezone()
          Return timezone offset in minutes or DatatypeConstants.FIELD_UNDEFINED if this optional field is not defined.
 TimeZone getTimeZone(int defaultZoneoffset)
          Returns a java.util.TimeZone for this class.
 QName getXMLSchemaType()
          Return the name of the XML Schema date/time type that this instance maps to.
 int getYear()
          Return low order component for XML Schema 1.0 dateTime datatype field for year or DatatypeConstants.FIELD_UNDEFINED.
 boolean isValid()
          Validate instance by getXMLSchemaType() constraints.
 XMLGregorianCalendar normalize()
          Normalize this instance to UTC.
 void reset()
          Reset this XMLGregorianCalendar to its original values.
 void setCalendarValue(CalendarValue value)
          Set the calendar value of this object
 void setDay(int day)
          Set days in month.
 void setFractionalSecond(BigDecimal fractional)
          Set fractional seconds.
 void setHour(int hour)
          Set hours.
 void setMillisecond(int millisecond)
          Set milliseconds.
 void setMinute(int minute)
          Set minutes.
 void setMonth(int month)
          Set month.
 void setSecond(int second)
          Set seconds.
 void setTimezone(int offset)
          Set the number of minutes in the timezone offset.
 void setYear(BigInteger year)
          Set low and high order component of XSD dateTime year field.
 void setYear(int year)
          Set year of XSD dateTime year field.
 CalendarValue toCalendarValue()
          Convert this SaxonXMLGregorianCalendar to a Saxon CalendarValue object
 GregorianCalendar toGregorianCalendar()
          Convert this XMLGregorianCalendar to a GregorianCalendar.
 GregorianCalendar toGregorianCalendar(TimeZone timezone, Locale aLocale, XMLGregorianCalendar defaults)
          Convert this XMLGregorianCalendar along with provided parameters to a GregorianCalendar instance.
 String toXMLFormat()
          Return the lexical representation of this instance.
 
Methods inherited from class javax.xml.datatype.XMLGregorianCalendar
equals, getMillisecond, hashCode, setTime, setTime, setTime, toString
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SaxonXMLGregorianCalendar

public SaxonXMLGregorianCalendar(CalendarValue value)
Create a SaxonXMLGregorianCalendar from a Saxon CalendarValue object

Parameters:
value - the CalendarValue
Method Detail

setCalendarValue

public void setCalendarValue(CalendarValue value)
Set the calendar value of this object

Parameters:
value - the calendar value

clear

public void clear()

Unset all fields to undefined.

Set all int fields to DatatypeConstants.FIELD_UNDEFINED and reference fields to null.

Specified by:
clear in class XMLGregorianCalendar

reset

public void reset()

Reset this XMLGregorianCalendar to its original values.

Specified by:
reset in class XMLGregorianCalendar

setYear

public void setYear(BigInteger year)

Set low and high order component of XSD dateTime year field.

Unset this field by invoking the setter with a parameter value of null.

Specified by:
setYear in class XMLGregorianCalendar
Parameters:
year - value constraints summarized in year field of date/time field mapping table.
Throws:
IllegalArgumentException - if year parameter is outside value constraints for the field as specified in date/time field mapping table.

setYear

public void setYear(int year)

Set year of XSD dateTime year field.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Note: if the absolute value of the year parameter is less than 10^9, the eon component of the XSD year field is set to null by this method.

Specified by:
setYear in class XMLGregorianCalendar
Parameters:
year - value constraints are summarized in year field of date/time field mapping table. If year is DatatypeConstants.FIELD_UNDEFINED, then eon is set to null.

setMonth

public void setMonth(int month)

Set month.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setMonth in class XMLGregorianCalendar
Parameters:
month - value constraints summarized in month field of date/time field mapping table.
Throws:
IllegalArgumentException - if month parameter is outside value constraints for the field as specified in date/time field mapping table.

setDay

public void setDay(int day)

Set days in month.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setDay in class XMLGregorianCalendar
Parameters:
day - value constraints summarized in day field of date/time field mapping table.
Throws:
IllegalArgumentException - if day parameter is outside value constraints for the field as specified in date/time field mapping table.

setTimezone

public void setTimezone(int offset)

Set the number of minutes in the timezone offset.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setTimezone in class XMLGregorianCalendar
Parameters:
offset - value constraints summarized in timezone field of date/time field mapping table.
Throws:
IllegalArgumentException - if offset parameter is outside value constraints for the field as specified in date/time field mapping table.

setHour

public void setHour(int hour)

Set hours.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setHour in class XMLGregorianCalendar
Parameters:
hour - value constraints summarized in hour field of date/time field mapping table.
Throws:
IllegalArgumentException - if hour parameter is outside value constraints for the field as specified in date/time field mapping table.

setMinute

public void setMinute(int minute)

Set minutes.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setMinute in class XMLGregorianCalendar
Parameters:
minute - value constraints summarized in minute field of date/time field mapping table.
Throws:
IllegalArgumentException - if minute parameter is outside value constraints for the field as specified in date/time field mapping table.

setSecond

public void setSecond(int second)

Set seconds.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setSecond in class XMLGregorianCalendar
Parameters:
second - value constraints summarized in second field of date/time field mapping table.
Throws:
IllegalArgumentException - if second parameter is outside value constraints for the field as specified in date/time field mapping table.

setMillisecond

public void setMillisecond(int millisecond)

Set milliseconds.

Unset this field by invoking the setter with a parameter value of DatatypeConstants.FIELD_UNDEFINED.

Specified by:
setMillisecond in class XMLGregorianCalendar
Parameters:
millisecond - value constraints summarized in millisecond field of date/time field mapping table.
Throws:
IllegalArgumentException - if millisecond parameter is outside value constraints for the field as specified in date/time field mapping table.

setFractionalSecond

public void setFractionalSecond(BigDecimal fractional)

Set fractional seconds.

Unset this field by invoking the setter with a parameter value of null.

Specified by:
setFractionalSecond in class XMLGregorianCalendar
Parameters:
fractional - value constraints summarized in fractional field of date/time field mapping table.
Throws:
IllegalArgumentException - if fractional parameter is outside value constraints for the field as specified in date/time field mapping table.

getEon

public BigInteger getEon()

Return high order component for XML Schema 1.0 dateTime datatype field for year. null if this optional part of the year field is not defined.

Value constraints for this value are summarized in year field of date/time field mapping table.

Specified by:
getEon in class XMLGregorianCalendar
Returns:
eon of this XMLGregorianCalendar. The value returned is an integer multiple of 10^9.
See Also:
getYear(), getEonAndYear()

getYear

public int getYear()

Return low order component for XML Schema 1.0 dateTime datatype field for year or DatatypeConstants.FIELD_UNDEFINED.

Value constraints for this value are summarized in year field of date/time field mapping table.

Specified by:
getYear in class XMLGregorianCalendar
Returns:
year of this XMLGregorianCalendar.
See Also:
getEon(), getEonAndYear()

getEonAndYear

public BigInteger getEonAndYear()

Return XML Schema 1.0 dateTime datatype field for year.

Value constraints for this value are summarized in year field of date/time field mapping table.

Specified by:
getEonAndYear in class XMLGregorianCalendar
Returns:
sum of eon and BigInteger.valueOf(year) when both fields are defined. When only year is defined, return it. When both eon and year are not defined, return null.
See Also:
getEon(), getYear()

getMonth

public int getMonth()

Return number of month or DatatypeConstants.FIELD_UNDEFINED.

Value constraints for this value are summarized in month field of date/time field mapping table.

Specified by:
getMonth in class XMLGregorianCalendar
Returns:
year of this XMLGregorianCalendar.

getDay

public int getDay()
Return day in month or DatatypeConstants.FIELD_UNDEFINED.

Value constraints for this value are summarized in day field of date/time field mapping table.

Specified by:
getDay in class XMLGregorianCalendar
See Also:
setDay(int)

getTimezone

public int getTimezone()
Return timezone offset in minutes or DatatypeConstants.FIELD_UNDEFINED if this optional field is not defined.

Value constraints for this value are summarized in timezone field of date/time field mapping table.

Specified by:
getTimezone in class XMLGregorianCalendar
See Also:
setTimezone(int)

getHour

public int getHour()
Return hours or DatatypeConstants.FIELD_UNDEFINED. Returns DatatypeConstants.FIELD_UNDEFINED if this field is not defined.

Value constraints for this value are summarized in hour field of date/time field mapping table.

Specified by:
getHour in class XMLGregorianCalendar
See Also:
XMLGregorianCalendar.setTime(int, int, int)

getMinute

public int getMinute()
Return minutes or DatatypeConstants.FIELD_UNDEFINED.

Returns DatatypeConstants.FIELD_UNDEFINED if this field is not defined.

Value constraints for this value are summarized in minute field of date/time field mapping table.

Specified by:
getMinute in class XMLGregorianCalendar
See Also:
XMLGregorianCalendar.setTime(int, int, int)

getSecond

public int getSecond()

Return seconds or DatatypeConstants.FIELD_UNDEFINED.

Returns DatatypeConstants.FIELD_UNDEFINED if this field is not defined. When this field is not defined, the optional xs:dateTime fractional seconds field, represented by getFractionalSecond() and XMLGregorianCalendar.getMillisecond(), must not be defined.

Value constraints for this value are summarized in second field of date/time field mapping table.

Specified by:
getSecond in class XMLGregorianCalendar
Returns:
Second of this XMLGregorianCalendar.
See Also:
getFractionalSecond(), XMLGregorianCalendar.getMillisecond(), XMLGregorianCalendar.setTime(int, int, int)

getMicrosecond

public int getMicrosecond()

Return microsecond precision of getFractionalSecond().

This method represents a convenience accessor to infinite precision fractional second value returned by getFractionalSecond(). The returned value is the rounded down to microseconds value of getFractionalSecond(). When getFractionalSecond() returns null, this method must return DatatypeConstants.FIELD_UNDEFINED.

Value constraints for this value are summarized in second field of date/time field mapping table.

Returns:
Millisecond of this XMLGregorianCalendar.
See Also:
getFractionalSecond(), XMLGregorianCalendar.setTime(int, int, int)

getFractionalSecond

public BigDecimal getFractionalSecond()

Return fractional seconds.

null is returned when this optional field is not defined.

Value constraints are detailed in second field of date/time field mapping table.

This optional field can only have a defined value when the xs:dateTime second field, represented by getSecond(), does not return DatatypeConstants.FIELD_UNDEFINED.

Specified by:
getFractionalSecond in class XMLGregorianCalendar
Returns:
fractional seconds of this XMLGregorianCalendar.
See Also:
getSecond(), XMLGregorianCalendar.setTime(int, int, int, java.math.BigDecimal)

compare

public int compare(XMLGregorianCalendar xmlGregorianCalendar)

Compare two instances of W3C XML Schema 1.0 date/time datatypes according to partial order relation defined in W3C XML Schema 1.0 Part 2, Section 3.2.7.3, Order relation on dateTime.

xsd:dateTime datatype field mapping to accessors of this class are defined in date/time field mapping table.

Specified by:
compare in class XMLGregorianCalendar
Parameters:
xmlGregorianCalendar - Instance of XMLGregorianCalendar to compare
Returns:
The relationship between this XMLGregorianCalendar and the specified xmlGregorianCalendar as DatatypeConstants.LESSER, DatatypeConstants.EQUAL, DatatypeConstants.GREATER or DatatypeConstants.INDETERMINATE.
Throws:
NullPointerException - if xmlGregorianCalendar is null.

normalize

public XMLGregorianCalendar normalize()

Normalize this instance to UTC.

2000-03-04T23:00:00+03:00 normalizes to 2000-03-04T20:00:00Z

Implements W3C XML Schema Part 2, Section 3.2.7.3 (A).

Specified by:
normalize in class XMLGregorianCalendar
Returns:
a copy of this XMLGregorianCalendar normalized to UTC.

toXMLFormat

public String toXMLFormat()

Return the lexical representation of this instance. The format is specified in XML Schema 1.0 Part 2, Section 3.2.[7-14].1, Lexical Representation".

Specific target lexical representation format is determined by getXMLSchemaType().

Specified by:
toXMLFormat in class XMLGregorianCalendar
Returns:
XML, as String, representation of this XMLGregorianCalendar
Throws:
IllegalStateException - if the combination of set fields does not match one of the eight defined XML Schema builtin date/time datatypes.

getXMLSchemaType

public QName getXMLSchemaType()

Return the name of the XML Schema date/time type that this instance maps to. Type is computed based on fields that are set.

Specified by:
getXMLSchemaType in class XMLGregorianCalendar
Returns:
One of the following class constants: DatatypeConstants.DATETIME, DatatypeConstants.TIME, DatatypeConstants.DATE, DatatypeConstants.GYEARMONTH, DatatypeConstants.GMONTHDAY, DatatypeConstants.GYEAR, DatatypeConstants.GMONTH or DatatypeConstants.GDAY.
Throws:
IllegalStateException - if the combination of set fields does not match one of the eight defined XML Schema builtin date/time datatypes.

isValid

public boolean isValid()
Validate instance by getXMLSchemaType() constraints.

Specified by:
isValid in class XMLGregorianCalendar
Returns:
true if data values are valid.

add

public void add(Duration duration)

Add duration to this instance.

The computation is specified in XML Schema 1.0 Part 2, Appendix E, Adding durations to dateTimes>. date/time field mapping table defines the mapping from XML Schema 1.0 dateTime fields to this class' representation of those fields.

Specified by:
add in class XMLGregorianCalendar
Parameters:
duration - Duration to add to this XMLGregorianCalendar.
Throws:
NullPointerException - when duration parameter is null.

toGregorianCalendar

public GregorianCalendar toGregorianCalendar()

Convert this XMLGregorianCalendar to a GregorianCalendar.

When this instance has an undefined field, this conversion relies on the java.util.GregorianCalendar default for its corresponding field. A notable difference between XML Schema 1.0 date/time datatypes and java.util.GregorianCalendar is that Timezone value is optional for date/time datatypes and it is a required field for java.util.GregorianCalendar. See javadoc for java.util.TimeZone.getDefault() on how the default is determined. To explicitly specify the TimeZone instance, see toGregorianCalendar(java.util.TimeZone, Locale, javax.xml.datatype.XMLGregorianCalendar).

Specified by:
toGregorianCalendar in class XMLGregorianCalendar
See Also:
toGregorianCalendar(java.util.TimeZone, java.util.Locale, javax.xml.datatype.XMLGregorianCalendar)

toGregorianCalendar

public GregorianCalendar toGregorianCalendar(TimeZone timezone,
                                             Locale aLocale,
                                             XMLGregorianCalendar defaults)

Convert this XMLGregorianCalendar along with provided parameters to a GregorianCalendar instance.

Since XML Schema 1.0 date/time datetypes has no concept of timezone ids or daylight savings timezone ids, this conversion operation allows the user to explicitly specify one with timezone parameter.

To compute the return value's TimeZone field,


getTimeZone

public TimeZone getTimeZone(int defaultZoneoffset)

Returns a java.util.TimeZone for this class.

If timezone field is defined for this instance, returns TimeZone initialized with custom timezone id of zoneoffset. If timezone field is undefined, try the defaultZoneoffset that was passed in. If defaultZoneoffset is FIELD_UNDEFINED, return default timezone for this host. (Same default as java.util.GregorianCalendar).

Specified by:
getTimeZone in class XMLGregorianCalendar
Parameters:
defaultZoneoffset - default zoneoffset if this zoneoffset is DatatypeConstants.FIELD_UNDEFINED.
Returns:
TimeZone for this.

clone

public Object clone()

Creates and returns a copy of this object.

Specified by:
clone in class XMLGregorianCalendar
Returns:
copy of this Object

toCalendarValue

public CalendarValue toCalendarValue()
Convert this SaxonXMLGregorianCalendar to a Saxon CalendarValue object

Returns:
the corresponding CalendarValue


Copyright (C) Michael H. Kay. All rights reserved.