Time (Java)
1. Introduction
TBD
20. AppTimeHelper
Application time helper, for converting XMLGregorianCalendar, etc.
package edu.cou.myapp.helper;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.springframework.lang.Nullable;
import lombok.experimental.UtilityClass;
/**
* Time helper (including Date, etc.)
*/
@UtilityClass
public class AppTimeHelper {
/** 'Europe/Madrid' time zone id */
private static final ZoneId TIME_ZONE_ID_EUROPE_MADRID = ZoneId.of("Europe/Madrid");
/**
* XMLGregorianCalendar to String [yyyy-MM-dd HH:mm:ss]
*
* @param calendar
* @return -
*/
public static String toYyyymmddHhmmss(XMLGregorianCalendar calendar) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.of(calendar.getYear(), calendar.getMonth(), calendar
.getDay(), calendar.getHour(), calendar.getMinute(), calendar.getSecond());
return localDateTime.format(formatter);
}
/**
* @param xmlgc -
* @return A LocalDate of xmlgc in the Europe/Madrid time zone
*/
@Nullable
public static LocalDate toLocalDate(@Nullable XMLGregorianCalendar xmlgc) {
if (xmlgc == null) {
return null;
}
LocalDate ret;
if (xmlgc.getTimezone() == DatatypeConstants.FIELD_UNDEFINED) {
ret = xmlgc.toGregorianCalendar().toZonedDateTime().toLocalDate();
} else {
// Ensure we're working in the 'Europe/Madrid' time zone.
ret = xmlgc.toGregorianCalendar().toZonedDateTime().withZoneSameInstant(
TIME_ZONE_ID_EUROPE_MADRID).toLocalDate();
}
return ret;
}
/**
* @param xmlgc -
* @return A LocalDateTime of xmlgc in the Europe/Madrid time zone
*/
@Nullable
public static LocalDateTime toLocalDateTime(@Nullable XMLGregorianCalendar xmlgc) {
if (xmlgc == null) {
return null;
}
LocalDateTime ret;
if (xmlgc.getTimezone() == DatatypeConstants.FIELD_UNDEFINED) {
ret = xmlgc.toGregorianCalendar().toZonedDateTime().toLocalDateTime();
} else {
// Ensure we're working in the 'Europe/Madrid' time zone.
ret = xmlgc.toGregorianCalendar().toZonedDateTime().withZoneSameInstant(
TIME_ZONE_ID_EUROPE_MADRID).toLocalDateTime();
}
return ret;
}
/**
* LocalDateTime to XMLGregorianCalendar
*
* @param ldt
* @return -
* @throws DatatypeConfigurationException -
*/
public static XMLGregorianCalendar fromLocalDateTimeToXmlGregorianCalendar(LocalDateTime ldt)
throws DatatypeConfigurationException {
// Eg: "2020-12-31T23:59:59"
String lexicalRepresentation = ldt.format(DateTimeFormatter.ISO_DATE_TIME);
// Created without timezone
XMLGregorianCalendar ret = DatatypeFactory.newInstance().newXMLGregorianCalendar(
lexicalRepresentation);
return ret;
}
}