2017-05-16 11 views
0

그리니치 표준시를 IST로 변환하려고합니다.yyyy-MM-dd'T'HH : mm : ss.SSSSSSS'Z '형식

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS"); 
    Date c= sdf.parse("2017-03-31T10:38:14.4723017Z"); 

    Date date = new Date(); 
    DateFormat istFormat = new SimpleDateFormat(); 
    DateFormat gmtFormat = new SimpleDateFormat(); 
    TimeZone gmtTime = TimeZone.getTimeZone("GMT"); 
    TimeZone istTime = TimeZone.getTimeZone("IST"); 

    istFormat.setTimeZone(gmtTime); 
    gmtFormat.setTimeZone(istTime); 
    System.out.println("GMT Time: " + istFormat.format(c)); 
    System.out.println("IST Time: " + gmtFormat.format(c)); 

내 출력이

GMT Time: 31/3/17 6:26 AM 
IST Time: 31/3/17 11:56 AM 

입니다하지만 내 실제 출력이 내 코드에 문제가 있습니다 무엇

GMT Time: 31/3/17 5:08 AM 
IST Time: 31/3/17 10:38 AM 

해야 하는가?

답변

3

밀리 세컨드 (SSS)는 3 자리 숫자 만 가능합니다. 그 이상으로 날짜가 표시됩니다 (예 : 10 : 38 : 14.1000은 10 : 38 : 15.000이됩니다. 2 백만 밀리 초를 추가하면 지금 보는 행동을 보게됩니다.

시도해보십시오.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
Date c = sdf.parse("2017-03-31T10:38:14.472Z"); 

System.out.println(c); 

DateFormat istFormat = new SimpleDateFormat(); 
DateFormat gmtFormat = new SimpleDateFormat(); 
TimeZone gmtTime = TimeZone.getTimeZone("GMT"); 
TimeZone istTime = TimeZone.getTimeZone("IST"); 

istFormat.setTimeZone(gmtTime); 
gmtFormat.setTimeZone(istTime); 
System.out.println("GMT Time: " + istFormat.format(c)); 
System.out.println("IST Time: " + gmtFormat.format(c)); 
+0

이 경우 4723017이 1 시간 18 분으로 나옵니다. 이는 실제와 예상 사이의 오프셋을 일치시킵니다. – ProgrammersBlock

+0

7digits의 응답을 얻고 있습니다. 프로그래밍 방식으로 변경하는 방법이 있습니까? – kushi

+1

아마도 밀리 초가 아니라 나노초 단위 일 것입니다. 필요하지 않은 경우 추가 숫자를자를 부분 문자열을 수행하십시오. – ProgrammersBlock

0

"yyyy-MM-dd'T'HH:mm:ss.sssssssZ"으로 형식을 변경해 보셨습니까?

또한 Date 객체에 Z을 입력하면 "2017-03-31T10 : 38 : 14.4723017 + 01 : 00"과 같이 시간대 지정자를 작성해야합니다.

+1

's'는 분당 초이므로 여전히 이상한 동작이 발생합니다. 원래의 문제는 날짜 자체의 표현으로 나타납니다. 밀리 초는 3 자리를 초과 할 수 없습니다. –