2016-12-03 2 views
0

요청 URL에 따라 날짜를 다른 요청한 시간대로 변환하고 날짜와 시간을 String으로 변환해야합니다. 나는 봄 부팅과 자바 8을 사용하고다른 시간대로 java.util.Date을 변환하십시오.

3.2 그래서 서비스 방법 안에, 내가 먼저 아래와 같은 시간대를 설정 몽고,

TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE)) 

하지만 통지하고, 그것은 전체 자바의 시간대를 변경합니다 신청. 따라서 메서드 이탈도 시간대는 이전에 설정 한 표준 시간대로 유지됩니다.

그래서 대신 setDefault 메소드 레벨, I는

(할당이 MongoDB의 컬렉션에 매핑 assignmentEndDate라는 속성으로 java.util.Date 갖는 Assignmet 문서 클래스, 아래와 SimpleDateFormat에 구체적으로 설정.에서 몽고 DB assignmentEndDate 인 UTC로 저장)

java.text.DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ss.SSS"); 
    formatter.setTimeZone(TimeZone.getTimeZone(timezone)); 
    Date assignmentEndDate = assignment.getAssignmentEndDate(); 
    formatter.format(assignmentEndDate); 

이렇게하면 응용 프로그램 수준 시간대가 변경되지 않습니다. 이 시나리오에 대한 올바른 접근 방법입니까? 새 날짜 시간 API의

+0

당신은'java.util.Date'에 제약을 받고'java.time' 패키지를 사용할 수없는 이유가 있습니까? –

+0

귀하의 코드는 이전 Java 날짜/시간 API에 대해 정확합니다. – jtahlborn

+0

@jtahlborn 그렇다면 java.util.Date 대신 java.time API를 사용하는 것이 좋습니다. – Harshana

답변

3

테이크의 장점은 Instant, 자바 폴더의 유틸리티 날짜 equalivent 시작할 수

ZoneId zoneId = ZoneId.of("America/Chicago"); 

자바 (8)에 포함되어 있습니다.

Instant instant = Instant.now(); 
ZonedDateTime zonedDateTime = instant.atZone(zoneId); 

또는

는 또한 당신은 날짜 LocalDateTime, 시간대 불가지론 수업을하고 ZonedDateTime로 변환 할 수 있습니다 ZonedDateTime

를 사용 으로 시작할 수 있습니다.

LocalDateTime ldt = LocalDateTime.now(); 
ZonedDateTime zdt = ldt.atZone(zoneId); 

당신은 easliy 새로운/오래된 날짜 시간 각 클래스에 도우미 메서드에 액세스하여 오래된 날짜 시간 수업 betweeen & 새로운 시간을 전환 할 수 있습니다. 자바 폴더의 유틸리티의 최신

변경은 기본 포맷이 그것으로 구축 한 데이터베이스를

//From ZonedDateTime to java util date. 
Date oldDate = Date.from(zdt.toInstant()); 

//From Instant to java util date 
Date oldDate = Date.from(instant); 

//From Date to Instant. 
Instant instant = date.toInstant(); 

모든 새 날짜 시간 API를 몽고에 저장하는 동안.

//2007-12-03T10:15:30-06:00[America/Chicago] 
String zonedDatetime = zonedDateTime.toString(); 

선택은 특정 형식의 당신은 항상 아래 방법에 DateTimeFormatter를 전달할 수 있습니다.

zonedDateTime.format(formatter) 
관련 문제