2014-03-13 3 views
1

문제로 어려움을 겪고 있습니다. 조사하고 디버깅할수록 더 완벽하게 이해할 수도 있습니다.DST 중 타임 스탬프 생성 문제 (다소)

내 시간대는 ET (UTC -5)입니다. 시간은 21:00에서 21:59 사이입니다. 날짜는 2014 년 3 월 8 일입니다.이 시간대에서 DST는 2014 년 3 월 9 일 1:59:59가 3:00:00이되는 시점에 발생합니다.

최대 절전 모드 DB에서 현재 날짜 시간을 Timestamp으로 유지하고 싶습니다. 이를 위해 Jadira의 PersistentDateTime 클래스를 사용합니다. 나는 UTC 값을 유지하므로 Jadira는 현재 날짜 시간을 변경합니다 (2014 년 3 월 8 일 21:30 동부 표준시). 2014 년 3 월 9 일 02:30 UTC가 올바른 것입니다. 그런 다음 UTC 날짜 시간의 문자열 표현에서 Timestamp을 만들고 Timestamp09-MAR-14 03.30.00.000000000 AM입니다. ET 표현으로 돌아 가면 2014 년 3 월 8 일 22:30 동부 표준시에 도착합니다.

내가 이해하는 한, 이것은 틀린 것입니다 - 동일한 날짜 시간을 가져야합니다.

Timestamp을 만들 때 DST가 적용되는 것처럼 보입니다. 하나의 세부 사항을 고려하고 있습니다 : ET는 UTC -5입니다. 21:00은 ET에서 DST가 5 시간을 뺀 시간입니다. 따라서 21:30 동부 표준시는 2:30 UTC입니다. 2:30은 3 월 8 일 동부 표준시에서 무효입니다. 아마도 이것은 이상한 행동과 관련이 있습니다.

jadira 1.9 (usertype.joda-time-1.9.jar 및 usertype.spi-1.9.jar)와 Hibernate 3.6.0을 사용하고 있습니다. 내 모델은 다음과 같습니다

@Entity 
@Table(name = RUN_STATUS_DATA_DB_TABLE_NAME) 
@Access(AccessType.PROPERTY) 
public class StatusData implements Identifiable, Serializable { 

    ... 

    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
    @Column(name = RUN_STATUS_COLUMN_POST_EXECUTION_END_TIME) 
    public DateTime getPostExecutionEndTime() { 
     return postExecutionEndTime; 
    } 

    public void setPostExecutionEndTime(DateTime postExecutionEndTime) { 
     this.postExecutionEndTime = postExecutionEndTime; 
    } 
} 

라인 (72)

에서 예상치 못한 타임 스탬프 this class에 왜 이런 일이에 대한 모든 생각을 작성하는 Jadira 코드? 감사합니다.

+0

일부 용어 수정 : ET = (EST * 및 * EDT). EST = -5, EDT = -4. 하지만 그 이유는 타임 스탬프가 2시 30 분 UTC 대신 3시 30 분 UTC에 있었던 이유를 설명하지 않습니다. ** 코드 **를 보여주십시오. 그렇지 않으면 더 이상 당신을 도울 수 없습니다. –

+0

Jadira의 어떤 버전을 사용하고 있습니까? –

+0

요청한 세부 정보를 포함하도록 질문을 편집했습니다. – sebi

답변

0

사용중인 Usertype 버전 이후로 많은 개선 및 수정이있었습니다.

나는 가능한 한 많은 기능을 Hibernate 3.6과 Java 5에 backport했다. usertype.core-hibernate36 모듈을 사용하여이 백 포트를 사용할 수있다.

현재 소스에서 다음 릴리스까지 빌드해야합니다. 또한 https://github.com/JadiraOrg/jadira

에서 소스를 얻을, 당신은 어떤 문제가 발생하는 경우 알려줘 http://jadira.sourceforge.net/usertype-userguide.html

에서 문서를보십시오.

면책 조항 : 저는 Jadira를 유지합니다.