net.sf.saxon.xqj

## Class SaxonXMLGregorianCalendar

- java.lang.Object
- - javax.xml.datatype.XMLGregorianCalendar
  - - 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

    Constructors
    Constructor and Description
    `SaxonXMLGregorianCalendar(CalendarValue value)` Create a SaxonXMLGregorianCalendar from a Saxon CalendarValue object

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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

      `finalize, 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.

      Saxon does not attempt to reset to the initial value as defined in the specification of the superclass, because it cannot distinguish the initial setting from subsequent changes. This method is therefore synonymous with `clear()`

      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,

      - when parameter `timeZone` is non-null, it is the timezone field.
      - else when `this.getTimezone() != FIELD_UNDEFINED`, create a `java.util.TimeZone` with a custom timezone id using the `this.getTimezone()`.
      - else when `defaults.getTimezone() != FIELD_UNDEFINED`, create a `java.util.TimeZone` with a custom timezone id using `defaults.getTimezone()`.
      - else use the `GregorianCalendar` default timezone value for the host is defined as specified by `java.util.TimeZone.getDefault()`.

      To ensure consistency in conversion implementations, the new `GregorianCalendar` should be instantiated in following manner.

      - Create a new `java.util.GregorianCalendar(TimeZone, Locale)` with TimeZone set as specified above and the `Locale` parameter.
      - Initialize all GregorianCalendar fields by calling `Calendar.clear()`
      - Obtain a pure Gregorian Calendar by invoking `GregorianCalendar.setGregorianChange( new Date(Long.MIN_VALUE))`.
      - Its fields ERA, YEAR, MONTH, DAY_OF_MONTH, HOUR_OF_DAY, MINUTE, SECOND and MILLISECOND are set using the method `Calendar.set(int,int)`
      Specified by:
        `toGregorianCalendar` in class `XMLGregorianCalendar`
      Parameters:
        `timezone` - provide Timezone. `null` is a legal value.
        `aLocale` - provide explicit Locale. Use default GregorianCalendar locale if value is `null`.
        `defaults` - provide default field values to use when corresponding field for this instance is FIELD_UNDEFINED or null. If `defaults`is `null` or a field within the specified `defaults` is undefined, just use `java.util.GregorianCalendar` defaults.
      Returns:
        a java.util.GregorianCalendar conversion of this instance.

    - #### 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) 2004-2013 Saxonica Limited. All rights reserved.