2017-03-27 1 views
0

안녕하세요, 저는 "2017-03-24 06:01:33"과 같은 날짜가있는 테이블을 UTC로 가지고 있습니다. 내 자바 프로그램에서 나는 그것을 문자열로 받아 들여야한다. 어떻게 클라이언트의 오프셋 시간과 분을 사용하여 로컬 날짜 문자열로 변환?UTC에서 현지 날짜로 변환

+1

http://stackoverflow.com/questions/31395441/convert-utc-date-to-local-date – soorapadman

답변

2

내가 할 것이다 :

OffsetDateTime odt = LocalDateTime.parse(dateFromDb, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")) 
      .atOffset(ZoneOffset.UTC); 
    String localDateString = odt.atZoneSameInstant(ZoneOffset.ofHoursMinutes(5, 30)) 
      .toLocalDateTime() 
      .toString(); 

을 당신이 시간과 분의 오프셋으로 클라이언트의 시간대를 가지고 가정입니다. 그렇다면 ZoneOffset.ofHoursMinutes()에서 해당 항목을 전달할 수 있습니다. 클라이언트 시간대에서 일년 중 일부 (예 : 미국 일 경우)의 서머 타임 (일광 절약 시간)을 사용하는 경우 날짜가 떨어지는 시간대의 오프셋을 가져야합니다. . 클라이언트 표준 시간대를 지정하는 다른 방법은 ZoneId.systemDefault() 또는 ZoneId.of("Asia/Kolkata")입니다. 따라서 서머 타임 규칙을 알고 더 안전 할 수 있습니다.

코드가 인쇄 :

2017-03-24T11:31:33 

당신은 예상대로 다섯 시간 반 앞서 입력 문자열의 알 수 있습니다.

시간이 아닌 날짜 만 필요한 경우 toLocalDateTime() 대신 toLocalDate()을 사용하십시오.

위의 모든 경우에는 Java 8이 필요합니다. 또는 Java 8 날짜 및 시간 클래스의 백엔드를 Java 6 및 7로 변경하는 방법은 ThreeTen Backport을 참조하십시오. Java 8을 사용할 수없고 백 포트를 사용하지 않으려면 this question: Not able to parse UTC date time to EST local time에서 아이디어를 찾으십시오.

+0

V.V 여기서 클라이언트의 오프셋 데이터는 어디에 있습니까? 나는 ZoneOffset.UTC가 서버의 오프셋을 취하기를 희망한다. – Virat

+0

내 편집 내용에 @Sandesha가 설명되어 있습니까? 클라이언트에서 표준 시간대 문자열을 얻고 있습니까, 아니면 어떻게됩니까? –

+0

현지 오프셋 분 및 오프셋 시간을 얻고 있습니다 ... "2017-03-24 06:01:33"UTC는 인도에서 현지 시간으로, 인도의 오프셋 시간은 5, 오프셋 분은 30 또는 미국에서 현지 날짜와 동일한 UTC 날짜를 표시해야하는 경우 USA 오프셋 시간 및 분을 가져옵니다. – Virat

0

사용이

simpleDateFormat.setTimeZone("Your-Client's-Timezone"); 
+0

어떻게 사용합니까? UTC String "2017-03-24 06:01:33"과 "yyyy-mm-dd"형식으로 로컬 문자열을 가져 오는 방법은 무엇입니까? @Sandeep – Virat

+0

@Sandesha, Javadocs에서 SimpleDateFormat을 확인 했습니까? –

+1

Asker가 Java 8에서 더 프로그래머에게 친숙한 날짜 및 시간 클래스를 사용할 수있을 때 제 생각에 겸손한 의견으로 'SimpleDateFormat'과 같은 오래된/오래된 클래스를 제안해서는 안됩니다. –

관련 문제