java.time
현대적인 접근 방식은 Java의 초기 버전과 함께 번들로 제공되는 성가신 레거시 날짜-시간 클래스를 대체 하는 java.time 클래스를 사용합니다 .
java.sql.Timestamp
클래스는 이러한 기존의 클래스 중 하나입니다. 더 이상 필요 없어요. 대신 Instant
JDBC 4.2 이상을 사용하는 데이터베이스에서 직접 또는 기타 java.time 클래스를 사용하십시오.
이 Instant
클래스는 나노초 (소수점의 최대 9 자리) 의 해상도로 타임 라인의 한 순간을 UTC 로 나타냅니다 .
Instant instant = myResultSet.getObject( … , Instant.class ) ;
기존 Timestamp
클래스 와 상호 운용해야하는 경우 이전 클래스에 추가 된 새 변환 메소드를 통해 즉시 java.time으로 변환하십시오.
Instant instant = myTimestamp.toInstant() ;
다른 시간대로 조정하려면 시간대를 ZoneId
객체 로 지정하십시오 . 지정 적절한 시간대 이름 의 형식 continent/region
예컨대, America/Montreal
, Africa/Casablanca
, 또는 Pacific/Auckland
. EST
또는 같은 3-4 자의 의사 영역 IST
은 표준 시간대가 아니고 고유하지도 않은 (!) 표준 시간대 가 아니므 로 절대 사용하지 마십시오 .
ZoneId z = ZoneId.of( "America/Montreal" ) ;
에 적용하여 개체 Instant
를 생성 ZonedDateTime
합니다.
ZonedDateTime zdt = instant.atZone( z ) ;
사용자에게 표시 할 문자열을 생성하려면 Stack Overflow를 검색 DateTimeFormatter
하여 많은 토론과 예제를 찾습니다.
귀하의 질문은 실제로 사용자 데이터 입력에서 날짜-시간 개체로 다른 방향으로가는 것입니다. 일반적으로 데이터 입력을 날짜와 시간의 두 부분으로 나누는 것이 가장 좋습니다.
LocalDate ld = LocalDate.parse( dateInput , DateTimeFormatter.ofPattern( "M/d/uuuu" , Locale.US ) ) ;
LocalTime lt = LocalTime.parse( timeInput , DateTimeFormatter.ofPattern( "H:m a" , Locale.US ) ) ;
질문이 명확하지 않습니다. 사용자가 입력 한 날짜와 시간을 UTC로 해석 하시겠습니까? 아니면 다른 시간대?
UTC를 의미하는 경우 UTC에 OffsetDateTime
대한 상수를 사용하여 오프셋으로를 만듭니다 ZoneOffset.UTC
.
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
다른 표준 시간대를 의미하는 경우 표준 시간대 개체 인 ZoneId
. 하지만 어느 시간대? 기본 시간대를 감지 할 수 있습니다. 또는 중요하다면 사용자의 의도를 확인해야합니다.
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
정의에 따라 항상 UTC로되어있는 더 간단한 객체를 얻으려면 Instant
.
Instant instant = odt.toInstant() ;
…또는…
Instant instant = zdt.toInstant() ;
데이터베이스로 보냅니다.
myPreparedStatement.setObject( … , instant ) ;
java.time 정보
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 클래스는 어디서 구할 수 있습니까?
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .