2014-11-21 2 views
2

나는 서버와 통신하는 Android에서 앱을 만들고 있습니다. 즉, 서버는 다음처럼 ISO 8601 날짜 문자열을 날 다시 제공 : 2014-11-21 12:24:56.662061-02안드로이드에서 ISO 8601 문자열을 자바 날짜로 구문 분석하는 방법

가 그럼 난 이렇게 내 문자열을 구문 분석 자바의 SimpleDateFormatter를 사용하려고 해요 :

 Locale l = new Locale("pt","BR"); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSZZ",l).parse(str_date); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTimeInMillis(date.getTime()); 

것입니다, 이 솔루션은 부분적으로 작동합니다. 나는 년, 월, 일,시를 정확하게 얻을 수 있지만 시간, 분, 초에 이르면 나는 항상 분을 잘못 생각합니다. 예제 문자열을 사용하여 인쇄하려고하면 "12:24"대신 "12:35"와 같은 형식이됩니다. 로케일을 사용하지 않고 로케일을 사용하여 다른 마스크를 시도했지만 아무것도 작동하지 않습니다.

link에서 SimpleDateFormatter는 ISO 8601을 매우 잘 지원하지 않으며 그 사람이 javax.xml.bind.DatatypeConverter.parseDateTime() 메소드를 사용하여 솔루션을 제공했지만 DatatypeConverter가 존재하지 않는 것을 보았습니다. 안드로이드 SDK. 그래서 ...이 문자열을 올바르게 구문 분석하려면 어떻게해야합니까?

+1

실례로 ISO 8601의 'T'가 누락되었습니다. 그러나 형식이이 문제를 처리하는 것 같습니다. 'SimpleDateFormat'의 예제는 하나의 'Z'문자만을 사용합니다. 아마도 그게 문제입니까? 또한, 당신은 너무 많은 것을 가지고 있습니다 ... SSS가해야하는 3 자리 이상이 없습니다. – haraldK

+0

글쎄, 나는 여러가지 마스크를 시도해 보았고, 트리플 S를 사용하는 마스크는 예외를 던졌다. 나는 또한 하나의 Z를 사용하려고 시도했지만 작동하지 않았다. – Mauker

답변

4

S은 밀리 초입니다. 662061 = 662 초 = 11 분.

아무 래도 마이크로 초를 버리고 SSS를 사용합니다.

str_date = str_date.replaceFirst("(\\d\\d[\\.,]\\d{3})\\d+", "$1"); 
+0

나는 그것을 시험해 볼 것이다! 감사! – Mauker

+0

그것은 일했다! 내가 당신의 코드를 사용하고 "SSSZ"로 마스크를 변경하고 그것은 효과가! 고마워요! – Mauker

관련 문제