fr.opensagres.xdocreport.core.utils.DatatypeUtils Maven / Gradle / Ivy
package fr.opensagres.xdocreport.core.utils;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class DatatypeUtils
{
/** JAXP DatatypeFactory */
private static DatatypeFactory datatypeFactory;
/**
* Gets a static instance of a JAXP DatatypeFactory.
*
* @return the factory or null if the factory could not be created
*/
private static DatatypeFactory getDataTypeFactory()
{
if ( datatypeFactory == null )
{
try
{
datatypeFactory = DatatypeFactory.newInstance();
}
catch ( DatatypeConfigurationException e )
{
e.printStackTrace();
}
}
return datatypeFactory;
}
/**
*
* Return the lexical representation of the given Date 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 {@link #getXMLSchemaType()}.
*
*
* @return 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.
*/
public static String formatAsXSDateTime( Date date )
{
GregorianCalendar gCalendar = new GregorianCalendar();
gCalendar.setTime( date );
XMLGregorianCalendar xmlCalendar = getDataTypeFactory().newXMLGregorianCalendar( gCalendar );
return xmlCalendar.toXMLFormat();
}
/**
*
* Create a new Date by parsing the String as a lexical representation.
*
*
* Parsing the lexical string representation is defined in XML Schema 1.0 Part 2, Section 3.2.[7-14].1,
* Lexical Representation.
*
*
* The string representation may not have any leading and trailing whitespaces.
*
*
* The parsing is done field by field so that the following holds for any lexically correct String x:
*
*
*
* newXMLGregorianCalendar( x ).toXMLFormat().equals( x )
*
*
* Except for the noted lexical/canonical representation mismatches listed in XML Schema 1.0 errata, Section 3.2.7.2.
*
*
* @param lexicalRepresentation Lexical representation of one the eight XML Schema date/time datatypes.
* @return XMLGregorianCalendar
created from the lexicalRepresentation
.
* @throws IllegalArgumentException If the lexicalRepresentation
is not a valid
* XMLGregorianCalendar
.
* @throws NullPointerException If lexicalRepresentation
is null
.
*/
public static Date parseXSDateTime( String lexicalRepresentation )
{
XMLGregorianCalendar xmlCalendar = getDataTypeFactory().newXMLGregorianCalendar( lexicalRepresentation );
return xmlCalendar.toGregorianCalendar().getTime();
}
}