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

972
Vistas
Problema de zona horaria en la aplicación Spring Boot JPA

Me enfrento a un problema de fecha y hora en mi aplicación spring boot jpa.

Por ejemplo, en mi base de datos tengo una columna created_on que contiene la fecha 2019-07-11 09:30:00 . Cuando busco este registro, arrojé JPA, se convierte a UTC.
Significa fecha 2019-07-11 09:30:00 convierte en 2019-07-11 05:00:00 .

La hora de mi sistema está en IST y la fecha también se guarda en la base de datos en IST.

Estoy usando la base de datos mysql.

en mi entidad

 private Date createdOn;

Columna de la base de datos:

 created_on timestamp

Servicio:

 @Service @Transactional(readOnly = true) public class EntityTypeService { @Autowired private IEntityTypeRepository entityTypeRepository; public EntityType findById(Long id) { EntityType entityType = entityTypeRepository.findById(id).orElse(new EntityType()); System.out.println(entityType.getCreatedOn()); return entityType; } }

Repositorio

 @Repository public interface IEntityTypeRepository extends CrudRepository<EntityType, Long> { }

La fecha en la base de datos es 2019-07-11 09:30:00

Pero cuando lo imprimo en el servicio System.out.println(entityType.getCreatedOn()); me da 2019-07-11 05:00:00 .

Este es un problema genérico en toda mi aplicación.

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

0

Después de tanto investigar encontré la solución.

En realidad, el problema se debió a

 spring.jpa.properties.hibernate.jdbc.time_zone=UTC

esta propiedad que he establecido en mi appication.properties .

Cuando eliminé esta propiedad, todo funciona bien en el backend. Backend que muestra el tiempo perfecto que está disponible en la base de datos.

Pero ahora, cuando la respuesta llega a la interfaz, en ese momento mi fecha se convierte a UTC.

Como backend, muestra 2020-06-03 18:56:14.0 y cuando se trata de front-end, se convierte en 2020-06-02T13:26:14.000+0000 .

Lo cual también es un problema para mí.

Entonces, después de investigar un poco más, descubrí que Jackson , de forma predeterminada, convierte todas las fechas a UTC cuando el objeto se envía a la interfaz.

La solución a este problema es

 spring.jackson.time-zone=IST

La zona horaria de mi base de datos y sistema es IST, por lo que también configuré IST en la zona horaria de jackson, lo que resuelve el problema.

Espero que esta respuesta pueda ayudar a alguien.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede configurar la zona horaria para la conexión de la base de datos usando serverTimezone por ejemplo: Asia/Kolkata y use useLegacyDatetimeCode=false

 spring.datasource.url= = jdbc:mysql://127.0.0.1/db_name?useLegacyDatetimeCode=false&serverTimezone=Asia/Kolkata

Y no use la Date de clase heredada en lugar de usar la clase moderna LocalDateTime

over 4 years ago · Santiago Trujillo Denunciar

0

Trate de evitar el uso de Fecha para las marcas de tiempo en las zonas horarias porque no está diseñado para manejarlas de una buena manera.

Puede intentar imprimir el objeto de fecha con un formateador o usar LocalDateTime (o ZonedDateTime si las zonas horarias son importantes para usted) en su lugar.

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