2012-11-20 2 views
2

사용하여 날짜 문자열을 구문 분석 ...나는이 같은 날에 전송되는 날짜를 구문 분석 할 SimpleDateFormat의

2011-03-02T09:06:07.404-07:00 

은 SimpleDateFormat의 객체를 사용할 때 문제가입니다 , 내가 구문 분석 예외를 얻고 난 상당히 시간대의 콜론 때문입니다.

다음은 SimpleDateFormat을 설정 한 것입니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 

다음은 개발자 설명서에서 분석 가능한 날짜 문자열의 가능한 차이 목록입니다. 보시다시피, 그들 중 어느 누구도 시간대에 콜론이 없습니다.

     yyyy-MM-dd 1969-12-31 
        yyyy-MM-dd 1970-01-01 
       yyyy-MM-dd HH:mm 1969-12-31 16:00 
       yyyy-MM-dd HH:mm 1970-01-01 00:00 
       yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800 
       yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000 
     yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800 
     yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000 
    yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800 
    yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000 

내 두 번째 문제 내가 시간대가 Z.로 설정 날짜 문자열을받을 때 내가 다시는 ParseException를 얻을 그러나 0000에 해당합니다 GMT와 같은 시간대를 설정하기위한 표준이다 . 다음은 날짜 문자열의 예입니다.

2011-01-14T10:50:31.520Z 

편집 여기

이다 나는 구문 분석하는 방법을 제 날짜 문자열 ..

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
Date date = null; 
try { 
    Log.d("CCDateUtilss", "Need to remove the colon from the date string in the timeszone"); 
    date = sdf.parse(string); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
return date.getTime(); 

난 그냥 통과와의 문제 발생을 대체 할 수있는 해결 방법 문자열 그래서 제대로 구문 분석 또는 더 우아한 솔루션은 내가 모를 약? 사전에

감사

+0

나는 그것을 파싱 할 수있다. 나는 ** Date ** like, 'Wed Mar 02 16:06:07 GMT + 00 : 00 2011'을 주었다. – user370305

+0

내 데이트를 구문 분석하는 방법에 대한 내 추가 사항을 확인하십시오. – StuStirling

답변

3

나는 (콜론으로 시간대를 포함한) 다른 형식으로 반환 할 수 있습니다 개의 다른 소스에서 텍스트 날짜 구문 분석하려면 다음 approcah를 사용

private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 


private long getTime(String time) throws Exception { 
    try { 
     return this.format.parse(time).getTime(); 
    } catch (Exception e) { 
     format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
    } 
    try { 
     return this.format.parse(time).getTime(); 
    } catch (Exception e) { 
     format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
     //For this you may need to manually adjust time offset 
    } 
    try { 
     return this.format.parse(time).getTime(); 
    } catch (Exception e) { 
     format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
    } 
    try { 
     return this.format.parse(time).getTime(); 
    } catch (Exception e) { 
     format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'"); 
     //For this you may need to manually adjust time offset 
    } 
    return this.format.parse(time).getTime(); 
} 

Note: 당신은 조정해야 할 수 있습니다를 문자열이 Z으로 끝나는 경우 시간대 오프셋을 수동으로 설정합니다.

효율성을 위해이 방법은 항상 마지막으로 작동하는 형식을 먼저 시도합니다.

감사합니다.

관련 문제