package com.github.aesteve.vertx.nubes.utils; import io.vertx.core.VertxException; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; /** * Singleton pattern implementation using enums. * See "Effective Java" by Joshua Bloch * * @author aesteve */ public enum DateUtils { INSTANCE; private transient DatatypeFactory factory; DateUtils() { try { factory = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException dtce) { throw new VertxException(dtce); } } public Date parseIso8601(String date) { XMLGregorianCalendar cal = factory.newXMLGregorianCalendar(date); return cal.toGregorianCalendar().getTime(); } public String formatIso8601(Date date, TimeZone zone) { GregorianCalendar cal = new GregorianCalendar(); cal.setTime(date); if (zone != null) { cal.setTimeZone(zone); } XMLGregorianCalendar calXml = factory.newXMLGregorianCalendar(cal); if (zone == null) { // display as UTC calXml = calXml.normalize(); } return calXml.toXMLFormat(); } public String formatIso8601(Date date) { return formatIso8601(date, null); } }