2014-07-07 4 views
5

문자열 형식의 날짜를 UTC로 변환하려고 시도하고 있으며, 이로 인해 2 분 정도의 변환이 발생하는 날짜 개체로 변환됩니다.SimpleDateFormat의 날짜 문자열 구문 분석이 올바르지 않습니다.

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US); 
fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC")); 

날짜 문자열을 구문 분석되기 전에 - 2014-07-07T18:24:23.788810

날짜를 구문 분석하는 12-13 분 차이가 있습니다 정확한 날짜 변환 Tue Jul 07 23:54:23 GMT+05:30 2014

입니다 Tue Jul 08 00:07:31 GMT+05:30 2014

후 전환. 나는 전환의 10 분의 범위에서 차이를 관찰했다.

어떤 아이디어가 잘못 되었나요?

+0

무엇이 당신의 입력 문자열 날짜 –

답변

12

SSSSSS은 기대하는 바와 같이 밀리 초가 아닌 밀리 초를 구문 분석합니다.

788810 밀리 초는 13 분, 8 초 및 810 밀리 초입니다. 결과는 실제로 2014-07-07T18 : 27 : 31.810입니다.

네, 정말 어리석은 API 디자인입니다. S...S 말 대신 "밀리 초"의 "두 번째의 분수"하는 것이 훨씬 더 나을 -하지만 사전에 자바-8 날짜/시간 API :(

나는 돈에 대한 최악의 일에서 멀리이다 't 생각해 보면 마이크로 세컨드를 SimpleDateFormat으로 구문 분석하는 방법이 있습니다. Java 시간 API의 사전 Java-8 정밀도는 어쨌든 밀리 초입니다. 따라서 substring으로 마지막 세 자리를 자르고 형식 문자열 끝에 SSS을 입력하십시오.

Java 8을 사용하는 경우 java.time을 사용할 것을 적극 권장합니다. 이 상황을 처리하십시오. (나는 파싱 API를 보지 않았지만, 괜찮을 것이라고 확신한다.)

+0

고마워! 전에 거의이 문제에 직면했음을 기억했습니다. 나는 방금 밀리 초 부분을 떨어 뜨렸다. 아직 Java 8을 사용하지 않습니다. 'java.time'에 감사드립니다. –

+0

실제로'java.time' 구문 분석 API는 괜찮 으면서 "밀리 초"보다는 "초의 부분"(0-9 자리)을 올바르게 처리합니다. 나는 그것을 따뜻하게 권고한다. 'DateTimeFormatter' 클래스를보십시오. –

관련 문제