Java localdatetime to xmlgregoriancalendar

Java XMLGregorianCalendar

Learn to convert XMLGregorianCalendar to Date class and format to string. Also, learn to apply timezone changes and daylight saving effects as well. This class is a representation of the W3C XML Schema 1.0 date/time datatypes that defines clear rules for specifying dates in XML format.

1. Creating XMLGregorianCalendar

Using the constructor of XMLGregorianCalendar is not recommended and docs suggest using the DataTypeFactory to create its instance.

//Create XMLGregorianCalendar GregorianCalendar cal = new GregorianCalendar(); cal.setTime(new Date()); XMLGregorianCalendar xCal = DatatypeFactory.newInstance() .newXMLGregorianCalendar(cal);

2. Converting XMLGregorianCalendar to Date

The GregorianCalendar.getTime() method returns the java.util.Date object.

XMLGregorianCalendar xCal = ..; //Create instance Date date = xCal.toGregorianCalendar().getTime(); System.out.println(date);
Thu Feb 17 23:29:25 IST 2022

3. Formatting XMLGregorianCalendar

The simplest way to format XMLGregorianCalendar is to first convert it to the Date object, and format the Date to String.

XMLGregorianCalendar xCal = ..; //Create instance Date date = xCal.toGregorianCalendar().getTime(); DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a z"); String formattedString = df.format(date); System.out.println(formattedString);

4. Formatting in Another Timezone

If you want to print the formatted date in another timezone, such as GMT , then we will need to set timezone is DateFormat instance.

XMLGregorianCalendar xCal = ..; //Create instance Date date = xCal.toGregorianCalendar().getTime(); DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a z"); df.setTimeZone(TimeZone.getTimeZone("GMT")); String formattedString = df.format(date); System.out.println(formattedString);

5. Handling Daylight Saving Time (DST) Effect

To check whether current time or adjusted time falls under DST (daylight saving time), then you might want to handle those changes as well.

Читайте также:  Series to datetime python

This will be useful when we are converting a Date from one timezone to another timezone, and there may be DST effects on those timezones.

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; public class Main < public static void main(String[] args) throws DatatypeConfigurationException < GregorianCalendar cal = new GregorianCalendar(); cal.setTime(new Date()); XMLGregorianCalendar xCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal); System.out.println(convertXmlGregorianToString(xCal)); >public static String convertXmlGregorianToString(XMLGregorianCalendar xc) < TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT"); TimeZone fromTimeZone = TimeZone.getDefault(); GregorianCalendar gCalendar = xc.toGregorianCalendar(); DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a z"); Date date = adjustToTimezone(gCalendar.getTime(), fromTimeZone, gmtTimeZone); String dateString = df.format(date); return dateString; >public static Date adjustToTimezone(Date date, TimeZone fromZone, TimeZone toZone) < Date adjustedToTimezone = new Date(date.getTime() + toZone.getRawOffset() - fromZone.getRawOffset()); // Is the adjusted date in Daylight savings? if (fromZone.inDaylightTime(adjustedToTimezone) != toZone.inDaylightTime(adjustedToTimezone)) < adjustedToTimezone = new Date(adjustedToTimezone.getTime() + toZone.getDSTSavings() - fromZone.getDSTSavings()); >return adjustedToTimezone; > >

Источник

“LocalDateTime to XMLGregorianCalendar” Code Answer

Here are some tips for finding solutions to java problems about “LocalDateTime to XMLGregorianCalendar” Code Answer. We are going to list out some java programming problem, you can find the solution for your programming question if you get stuck in coding. Getting stuck in programming is quite normal for all the developers. Most of the beginners and even experienced programmers take help from some resources but that doesn’t mean they are dumb or bad programmers. Below are some solution about “LocalDateTime to XMLGregorianCalendar” Code Answer.

LocalDateTime to XMLGregorianCalendar

LocalDateTime localDatetime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
String formattedDate = localDatetime.format(formatter);
XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(formattedDate);

Источник

Преобразование между локальной датой и XMLGregorianCalendar

В этом кратком руководстве мы обсудим Local Date и XMLGregorianCalendar и приведем примеры преобразования между этими двумя типами.

Читайте также:  How to detect javascript

2. XMLGregorianCalendar

Стандарт схемы XML определяет четкие правила для указания дат в формате XML. Для использования этого формата класс Java XMLGregorianCalendar , представленный в Java 1.5, представляет собой представление типов данных W3C XML Schema 1.0 date | time|/.

3. Местная Дата

Экземпляр Local Data представляет дату без часового пояса в календарной системе ISO-8601. В результате Локальные данные , например, подходят для хранения дней рождения, но не для хранения чего-либо, связанного со временем. Java представила Локальную дату в версии 1.8.

4. Из LocalDate в XMLGregorianCalendar

Сначала мы посмотрим, как преобразовать Local Date в XMLGregorianCalendar . Для создания нового экземпляра XMLGregorianCalendar мы используем DataTypeFactory из пакета javax.xml.datatype|/.

Итак, давайте создадим экземпляр LocalDate и преобразуем его в XMLGregorianCalendar :

LocalDate localDate = LocalDate.of(2019, 4, 25); XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(localDate.toString()); assertThat(xmlGregorianCalendar.getYear()).isEqualTo(localDate.getYear()); assertThat(xmlGregorianCalendar.getMonth()).isEqualTo(localDate.getMonthValue()); assertThat(xmlGregorianCalendar.getDay()).isEqualTo(localDate.getDayOfMonth()); assertThat(xmlGregorianCalendar.getTimezone()).isEqualTo(DatatypeConstants.FIELD_UNDEFINED);

Как отмечалось ранее, экземпляр XMLGregorianCalendar имеет возможность иметь информацию о часовом поясе. Однако Local Date не содержит никакой информации о времени.

Поэтому, когда мы выполняем преобразование, значение часового пояса останется как FIELD_UNDEFINED .

5. От XMLGregorianCalendar до локальной даты

Аналогично, теперь мы увидим, как выполнить преобразование наоборот. Как оказалось, преобразование из XMLGregorianCalendar в Local Date намного проще.

Опять же, поскольку LocalDate не содержит информации о времени, экземпляр Local Data может содержать только подмножество информации XMLGregorianCalendar .

Давайте создадим экземпляр XMLGregorianCalendar и выполним преобразование:

XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-04-25"); LocalDate localDate = LocalDate.of( xmlGregorianCalendar.getYear(), xmlGregorianCalendar.getMonth(), xmlGregorianCalendar.getDay()); assertThat(localDate.getYear()).isEqualTo(xmlGregorianCalendar.getYear()); assertThat(localDate.getMonthValue()).isEqualTo(xmlGregorianCalendar.getMonth()); assertThat(localDate.getDayOfMonth()).isEqualTo(xmlGregorianCalendar.getDay());

6. Заключение

В этом кратком руководстве мы рассмотрели преобразования между экземплярами LocalDate и XMLGregorianCalendar , и наоборот.

И, как всегда, пример кода доступен на GitHub .

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Читайте также:  Html cellpadding left right

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for conversion between java.time.LocalDateTime and javax.xml.datatype.XMLGregorianCalendar #1791

Support for conversion between java.time.LocalDateTime and javax.xml.datatype.XMLGregorianCalendar #1791

Comments

When mapping LocalDate to XmlGregorianCalendar , timezone is set to DatatypeConstants.FIELD_UNDEFINED. But when converting LocalDateTime to XmlGregorianCalendar , the timezone is currently set to system default.

The text was updated successfully, but these errors were encountered:

@filiphr
The issue is reproed here — https://github.com/avmohan/mapstruct-issue-1791-sample
The generated code is below (for both LocalDate & LocalDateTime)

public class SourceTargetMapperImpl implements SourceTargetMapper < private final DatatypeFactory datatypeFactory; public SourceTargetMapperImpl() < try < datatypeFactory = DatatypeFactory.newInstance(); > catch ( DatatypeConfigurationException ex ) < throw new RuntimeException( ex ); > > @Override public Target mapSource(Source source) < if ( source == null ) < return null; > Target target = new Target(); if ( source.getLocalDateTime() != null ) < target.setLocalDateTime( dateToXmlGregorianCalendar( Date.from( source.getLocalDateTime().toInstant( ZoneOffset.UTC ) ) ) ); > target.setLocalDate( localDateToXmlGregorianCalendar( source.getLocalDate() ) ); return target; > private XMLGregorianCalendar dateToXmlGregorianCalendar( Date date ) < if ( date == null ) < return null; > GregorianCalendar c = new GregorianCalendar(); c.setTime( date ); return datatypeFactory.newXMLGregorianCalendar( c ); > private XMLGregorianCalendar localDateToXmlGregorianCalendar( LocalDate localDate ) < if ( localDate == null ) < return null; > return datatypeFactory.newXMLGregorianCalendarDate( localDate.getYear(), localDate.getMonthValue(), localDate.getDayOfMonth(), DatatypeConstants.FIELD_UNDEFINED ); > >

Источник

Оцените статью