2016-06-01 6 views
3

:에 생성JPA와 자바 8 날짜 API - 선택 올바른 구현 (인스턴트, LocalDateTime, ZonedDateTime) 다음과 같은 경우에 JPA 엔티티 매핑에 가장 적합한 사용 가능한 자바 8 시간 API 클래스의

  • 계약 정보
  • 날짜의 유형은
  • 비즈니스 로직
  • 일자 유럽/비엔나 시간대의 UI에서 UTC의 모든 계산이 표시됩니다 않습니다 데이터베이스에 UTC에 저장됩니다

대부분의 예제는 LocalDateTime을 사용했지만 그 중 하나의 표준 시간대 개념은 없습니다. 우리의 모든 비즈니스 로직은 UTC로 계산을 수행해야하며 또한 UTC로 데이터를 검색/저장하지 않으므로 인스턴트 또는 ZonedDateTime이 더 적절할까요?

JPA 엔티티 매핑 (예 : Instant를 일주일 추가 할 수 없음)에 사용할 유형을 결정할 때 고려해야 할 실제적인 의미는 무엇입니까?

답변

3

Instant은 기본적으로 UTC이므로 UTC를 항상 다루는 경우 필요한 모든 작업이 있으면 충분합니다. LocalDateTime은 특정 표준 시간대 또는 영역 오프셋이없는 타임 스탬프이지만 UTC 만 취급하는 경우 Instant이 제공하는 작업에 유용 할 수 있습니다.

명확한 영역 오프셋을 가질 수있는 가장 정확한 유형은 UTC와 다른 시간대간에 앞뒤로 변환하는 동안 시간을 ​​보존 할 수있게합니다. OffsetDateTime입니다. 편리한 ZoneOffset.UTC 상수를 사용하여 UTC의 +0 시간 오프셋을 수정할 수 있습니다. ZonedDateTime에는 일광 절약 시간제와 같은 항목에 대한 지원을 추가하는 TimeZone이라는 개념이 추가됩니다. 이는 특정 지역에서 현지 시간을 표시하지 않으려는 경우가 아니라면 일반적으로 UTC를 사용할 때 필요하지 않은 개념입니다.

+0

의미가 있습니다. 마지막 결정을 위해 JSR-000221 JDBC API Specification 4.2, 특히 부록 B-4의 테이블이 유용하다는 것을 알게되었습니다. LocalDateTime을 사용합니다. https://jcp.org/aboutJava/communityprocess/mrel/jsr221/index2.html – JanM

+1

'ZonedDateTime'을 사용하기로한다면'mysql'과'java' 엔티티 클래스에서 어떤 데이터 타입을 사용해야하는지 설명 할 수 있습니다. 'OffsetDateTime'? –