## net.sf.saxon.xqj
Class SaxonXMLGregorianCalendar

    java.lang.Object
      javax.xml.datatype.XMLGregorianCalendar
          net.sf.saxon.xqj.SaxonXMLGregorianCalendar

All Implemented Interfaces:
  java.lang.Cloneable

    public class SaxonXMLGregorianCalendar

extends javax.xml.datatype.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(javax.xml.datatype.Duration duration)` Add `duration` to this instance.
`void` `clear()` Unset all fields to undefined.
`java.lang.Object` `clone()` Creates and returns a copy of this object.
`int` `compare(javax.xml.datatype.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`.
`java.math.BigInteger` `getEon()` Return high order component for XML Schema 1.0 dateTime datatype field for `year`.
`java.math.BigInteger` `getEonAndYear()` Return XML Schema 1.0 dateTime datatype field for `year`.
`java.math.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.
`java.util.TimeZone` `getTimeZone(int defaultZoneoffset)` Returns a `java.util.TimeZone` for this class.
`javax.xml.namespace.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.
`javax.xml.datatype.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(java.math.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(java.math.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
`java.util.GregorianCalendar` `toGregorianCalendar()` Convert this `XMLGregorianCalendar` to a `GregorianCalendar`.
`java.util.GregorianCalendar` `toGregorianCalendar(java.util.TimeZone timezone, java.util.Locale aLocale, javax.xml.datatype.XMLGregorianCalendar defaults)` Convert this `XMLGregorianCalendar` along with provided parameters to a `GregorianCalendar` instance.
`java.lang.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 `javax.xml.datatype.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 `javax.xml.datatype.XMLGregorianCalendar`

### setYear

    public void setYear(java.math.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `year` - value constraints summarized in year field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `month` - value constraints summarized in month field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `day` - value constraints summarized in day field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `offset` - value constraints summarized in timezone field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `hour` - value constraints summarized in hour field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `minute` - value constraints summarized in minute field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `second` - value constraints summarized in second field of date/time field mapping table.
  Throws:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `millisecond` - value constraints summarized in millisecond field of date/time field mapping table.
  Throws:
    `java.lang.IllegalArgumentException` - if `millisecond` parameter is outside value constraints for the field as specified in date/time field mapping table.

### setFractionalSecond

    public void setFractionalSecond(java.math.BigDecimal fractional)

  Set fractional seconds.

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

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

### getEon

    public java.math.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 `javax.xml.datatype.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 `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    year of this `XMLGregorianCalendar`.
  See Also:
    `getEon()`, `getEonAndYear()`

### getEonAndYear

    public java.math.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 `javax.xml.datatype.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 `javax.xml.datatype.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 `javax.xml.datatype.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 `javax.xml.datatype.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 `javax.xml.datatype.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 `javax.xml.datatype.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 `javax.xml.datatype.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 java.math.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 `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    fractional seconds of this `XMLGregorianCalendar`.
  See Also:
    `getSecond()`, `XMLGregorianCalendar.setTime(int, int, int, java.math.BigDecimal)`

### compare

    public int compare(javax.xml.datatype.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 `javax.xml.datatype.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:
    `java.lang.NullPointerException` - if `xmlGregorianCalendar` is null.

### normalize

    public javax.xml.datatype.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 `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    a copy of this `XMLGregorianCalendar` normalized to UTC.

### toXMLFormat

    public java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    XML, as `String`, representation of this `XMLGregorianCalendar`
  Throws:
    `java.lang.IllegalStateException` - if the combination of set fields does not match one of the eight defined XML Schema builtin date/time datatypes.

### getXMLSchemaType

    public javax.xml.namespace.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 `javax.xml.datatype.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:
    `java.lang.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 `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    true if data values are valid.

### add

    public void add(javax.xml.datatype.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `duration` - Duration to add to this `XMLGregorianCalendar`.
  Throws:
    `java.lang.NullPointerException` - when `duration` parameter is `null`.

### toGregorianCalendar

    public java.util.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 `javax.xml.datatype.XMLGregorianCalendar`
  See Also:
    `toGregorianCalendar(java.util.TimeZone, java.util.Locale, javax.xml.datatype.XMLGregorianCalendar)`

### toGregorianCalendar

    public java.util.GregorianCalendar toGregorianCalendar(java.util.TimeZone timezone,
                                                           java.util.Locale aLocale,
                                                           javax.xml.datatype.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 `javax.xml.datatype.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 java.util.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 `javax.xml.datatype.XMLGregorianCalendar`
  Parameters:
    `defaultZoneoffset` - default zoneoffset if this zoneoffset is `DatatypeConstants.FIELD_UNDEFINED`.
  Returns:
    TimeZone for this.

### clone

    public java.lang.Object clone()

  Creates and returns a copy of this object.

  Specified by:
    `clone` in class `javax.xml.datatype.XMLGregorianCalendar`
  Returns:
    copy of this `Object`

### toCalendarValue

    public CalendarValue toCalendarValue()

  Convert this SaxonXMLGregorianCalendar to a Saxon CalendarValue object

  Returns:
    the corresponding CalendarValue

Copyright (c) Saxonica Limited. All rights reserved.