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;

}

}