javax.xml.bind.annotation.adapters
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class LocalDateAdapter extends XmlAdapter<XMLGregorianCalendar, LocalDate> {
@Override
public XMLGregorianCalendar marshal(LocalDate localDate) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth(), 0, 0, 0, 0, 0);
}
@Override
public LocalDate unmarshal(XMLGregorianCalendar xmlGregorianCalendar) throws Exception {
return LocalDate.of(xmlGregorianCalendar.getYear(), xmlGregorianCalendar.getMonth(), xmlGregorianCalendar.getDay());
}
}import javax.xml.bind.annotation.adapters.XmlAdapter;
public class ZonedDateTimeAdapter extends XmlAdapter<XMLGregorianCalendar, ZonedDateTime> {
@Override
public XMLGregorianCalendar marshal(ZonedDateTime zonedDateTime) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(zonedDateTime.getYear(), zonedDateTime.getMonthValue(), zonedDateTime.getDayOfMonth(), zonedDateTime.getHour(), zonedDateTime.getMinute(), zonedDateTime.getSecond(), zonedDateTime.getNano()/1000000, zonedDateTime.getOffset().getTotalSeconds()/3600);
}
@Override
public ZonedDateTime unmarshal(XMLGregorianCalendar xmlGregorianCalendar) throws Exception {
return ZonedDateTime.of(xmlGregorianCalendar.getYear(), xmlGregorianCalendar.getMonth(), xmlGregorianCalendar.getDay(), xmlGregorianCalendar.getHour(), xmlGregorianCalendar.getMinute(), xmlGregorianCalendar.getSecond(), xmlGregorianCalendar.getMillisecond()*1000000, ZoneOffset.ofHoursMinutes(xmlGregorianCalendar.getTimezone(), xmlGregorianCalendar.getTimezone()));
}
}