hibernar + muelle de arranque almacenar la fecha en UTC problemas de zona horaria

Avdev4j:

Estoy haciendo algunas pruebas para definir UTC como zona horaria predeterminada para mi aplicación. En primer lugar quiero mis valores de fecha y hora que se almacenan con el UTC.

Según VLAD Mihalcea ( https://vladmihalcea.com/how-to-store-date-time-and-timestamps-in-utc-time-zone-with-jdbc-and-hibernate/ ) y https: // moelholm .com / 2016/11/09 / primavera-boot-controlar-zonas horarias-con-hibernación / he puesto en mi archivo de propiedades:

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

Para la prueba de que estoy usando la base de datos H2, He creado una entidad muestra con toda java 8 fechaHora Tipo.

En mi Liquibase config que se definen así:

<column name="instant" type="timestamp"/>
<column name="local_date" type="date"/>
<column name="local_time" type="time"/>
<column name="offset_time" type="time"/>
<column name="local_date_time" type="timestamp"/>
<column name="offset_date_time" type="timestamp"/>
<column name="zoned_date_time" type="timestamp"/>

Creo que estoy usando el tipo bueno para cada campo. Es un trabajo para todos los campos excepto "LOCAL_TIME" "offset_time", que son el tiempo de SQL no tipos de fecha y hora.

introducir descripción de la imagen aquí

Como se puede ver i añadido esta fila a las 8:39 am (París GMT + 2) y marcas de tiempo tienen el valor buena GMT (6:38 am). Sin embargo, tanto "LOCAL_TIME" y "offset_time" tienen un valor extraño (07:39 am).

Me pregunto por qué este comportamiento, si algunos de ustedes tienen una idea de por qué mis dos campos de tiempo no almacenar los valores correctamente.

PS: Versión:

  • Hibernate: 5.2.17.Final
  • arranque de primavera: 2.0.4.RELEASE

Mi uso Entidad de ejemplo para insertar datos:

import javax.persistence.*;
import java.io.Serializable;
import java.time.*;
import java.util.Objects;

@Entity
@Table(name = "avdev_myData")
public class MyData implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "instant")
    private Instant instant;

    @Column(name = "local_date")
    private LocalDate localDate;

    @Column(name = "local_time")
    private LocalTime localTime;

    @Column(name = "offset_time")
    private OffsetTime offsetTime;

    @Column(name = "local_date_time")
    private LocalDateTime localDateTime;

    @Column(name = "offset_date_time")
    private OffsetDateTime offsetDateTime;

    @Column(name = "zoned_date_time")
    private ZonedDateTime zonedDateTime;
Avdev4j:

Me abrió un problema en el seguimiento de errores de hibernación y tenía una respuesta de mi problema.

Para LocalTime la tranformación es relativo al del 1 de enero 1970 no es el día que había corrido la prueba. Por lo que el horario de verano no se maneja.

De acuerdo con Vlad Mihalcea tenemos que utilizar LocalDateTime lugar porque sabemos la fecha y por supuesto si está en período de horario de verano o no.

hay toda la respuesta aquí: https://hibernate.atlassian.net/browse/HHH-12988?focusedCommentId=103750&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-103750

Saludos

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199533&siteId=1
Recomendado
Clasificación