2014-03-05 1 views
0

String을 Date로 구문 분석하고 해당 Date를 다른 String 형식으로 출력하여 출력하려고합니다.SimpleDateFormat이 (가) 날짜 문자열을 잘못 파싱합니다.

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy"); 
SimpleDateFormat dateParser = new SimpleDateFormat("d/M/yyyy h:m:s a"); 
String formattedDocumentDate = dateFormatter.format(dateParser.parse(sysObj.getString("document_date"))); 

sysObj.getString("document_date")의 결과는 1/31/2013 12:00:01 AM입니다 다음과 같이

내 날짜 형식 코드입니다. 그리고 formattedDocumentDate의 값을 확인하면 01/07/2015이됩니다.

도움을 주시면 감사하겠습니다.

+6

'1 월 31 일'은 'd/M/yyyy' 날짜 형식에 어떻게 맞습니까? –

+0

한 단어 : "관용"(또는 31-7 = 24 즉 2 년) –

+0

예, 2013 년 초부터 31 개월을 계산하면 2015 년 7 월에 끝납니다. 답변으로 게시해야합니까? –

답변

3

달을 31 일로 파싱하고 있습니다. SimpleDateFormat이 올바른 날짜를 알려줍니다. 따라서 2012 년 1 월 1 일 31 개월에 추가됩니다. 이것은 2 년 7 개월입니다. 결과가 나타납니다. 01/07/2015. 따라서 SimpleDateFormat이 올바르게 작동합니다.

하나의 해결책은 날짜 패턴을 M/d/yyyy h:m:s a 또는 입력 데이터로 변경하는 것입니다.

이러한 시도를 피하려면 SimpleDateFormat 완화 모드를 해제해야합니다. 형식이 맞지 않으면 예외가 발생합니다.

2

입력 형식이 실제로 몇 달이 먼저 며 며칠이 소요되는 것 같습니다. 따라서 "MM/dd/yyyy"여야합니다. So :

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/M/yyyy"); 
SimpleDateFormat dateParser = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a"); 
String formattedDocumentDate = dateFormatter.format(dateParser.parse(sysObj.getString("document_date")));