Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
How to set timestamp with zone in XMLGregorianCalendar

I have DateTime in this format '2020-11-08T13:05:46.000-07:00' and trying to set the same to XMLGregorianCalendar. it gets automatically converted to 2020-11-08T20:05:46.000+0000.

Anyway to save it as UTC?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

tl;dr

OffsetDateTime
.parse( "2020-11-08T13:05:46.000-07:00" )
.toInstant() 

java.time

XMLGregorianCalendar is a legacy class, supplanted years ago by ZonedDateTime.

Your input has no time zone, only an offset-from-UTC. So parse that string as an OffsetDateTime.

OffsetDateTime odt = OffsetDateTime.parse( "2020-11-08T13:05:46.000-07:00" ) ;

Easiest way to adjust to UTC (an offset of zero hours-minutes-seconds) is to extract an Instant.

Instant instant = odt.toInstant() ;
over 4 years ago · Santiago Trujillo Denunciar

0

You can do it as follows:

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 {
        String givenDateTimeString = "2020-11-08T13:05:46.000-07:00";
        XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance()
                .newXMLGregorianCalendar(givenDateTimeString);
        System.out.println(xmlGregorianCalendar);
    }
}

Output:

2020-11-08T13:05:46.000-07:00

However, I suggest you switch to the modern date-time API.

Using the modern date-time API:

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String givenDateTimeString = "2020-11-08T13:05:46.000-07:00";
        OffsetDateTime odt = OffsetDateTime.parse(givenDateTimeString);
        // Default format i.e. OffsetDateTime#toString
        System.out.println(odt);

        // Custom format
        System.out.println(odt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH)));

        // Convert it to date-time at UTC
        OffsetDateTime odtUTC = odt.withOffsetSameInstant(ZoneOffset.UTC);
        System.out.println(odtUTC);
        System.out.println(odtUTC.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX", Locale.ENGLISH)));
    }
}

Output:

2020-11-08T13:05:46-07:00
2020-11-08T13:05:46.000-07:00
2020-11-08T20:05:46Z
2020-11-08T20:05:46.000Z

Learn more about the modern date-time API at Trail: Date Time.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda