2017-01-19 1 views
2

최대 절전 모드 및 joda 시간을 사용하여 데이터베이스에 DateTime을 저장할 때 이상한 문제가 있습니다. 나는 개정 날짜 엔티티를 저장하면최대 절전 모드 SQL Server 데이터베이스에서 joda DateTime을 저장하는 방법

import org.joda.time.DateTime; 

public class RelationshipEntity { 

    @Column(name = "date_revision") 
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    private DateTime dateRevision; 

    // other fields 
} 

내가 TimeZone.setDefault(TimeZone.getTimeZone("Europe/Paris"));

과 응용 프로그램에서 유럽/파리 (GMT + 1)에 시간대를 설정 한 :

나는 이런 콩이 데이터베이스에 2017-01-19 13:24까지, 나는 데이터베이스에 날짜가 2017-01-19 12:24으로 설정되어 있고 왜 그런지 이해할 수 없다는 것을 알 수 있습니다. 때문에

는 데이터베이스 시간대가 유럽/파리 것 같습니다 : 나는 봄 부팅을 사용할 때

SELECT SYSDATETIME(); //2017-01-19 14:41

SELECT SYSUTCDATETIME(); // 2017-01-19 13:41

내가에 논문 속성을 추가하려고 application.yml

jadira.usertype.autoRegisterUserTypes: true 
jadira.usertype.databaseZone: jvm 
jadira.usertype.javaZone: jvm 

을 입력하고 -Duser.timezone=Europe/Paris 인수로 애플리케이션을 시작하지만 여전히 저장 날짜를 UTC로 데이터베이스에 저장합니다.

내가 LocalDateTimeDateTime을 변경 문제를 해결하기 위해이 변화

@Column(name = "date_revision") 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") 
private DateLocalTime dateRevision; 

를, 데이터베이스의 dateRevision 내가 내 자바 빈에서 설정 한 동일합니다.

누군가 org.joda.time.DateTime을 사용할 때 날짜가 UTC로 변환되는 이유를 설명 할 수 있습니까?

참고 : I 최대 절전 모드 4 사용하고 joda 시간은 2.5

+0

DB에 시간을 절약 할 때 보편적 인 표준이 있다는 것을 의미하지 않습니까? 두 개의 서로 다른 시간대에있는 2 명의 사용자가 사용한다면 어떻게 될까요? – notanormie

+0

내 응용 프로그램과 데이터베이스의 시간대가 동일하면 왜 Java의 날짜와 db의 날짜가 다른지 이해할 수 없습니다. DateTime을 사용할 때 UTC로 날짜를 변환하는 기본 동작입니까? –

답변

3

이다 zoda 날짜 시간 저장 UTC와 LocalDateTime 저장합니다이며, 당신이 걱정하지 않을 때 사용되어야로 날짜 DB에서 날짜 때문에 시간대.

시간대 (일광 절약 시간제 등)를 고려해야하는 DateTime의 경우 DateTime은 해당 방식으로 처리하고 표준시로 날짜를 저장합니다.

자세한 내용은 answer을 참조하십시오.

+0

당신이 옳다고 생각합니다. 문서 [PersistentDateTime] (http://jadira.sourceforge.net/apidocs/org/jadira/usertype/dateandtime/joda/PersistentDateTime.html)에 말했습니다. _ 유형이 UTC 시간대를 사용하여 저장되고 표시됩니다. JVM의 기본 zone_을 사용하는 JVM에서이 동작이 발생합니다. –

+0

예, 추가 정보를 주셔서 감사합니다 :) @ oliv37 –

관련 문제