// Wed Apr 29 00:00:00 KST 2015
FastDateFormat.getInstance(“yyyyMMdd”).parse(“20150429”);
// throws ParseException
FastDateFormat.getInstance(“yyyyMMdd”).parse(“2015”);
// Thu Mar 16 00:00:00 KST 81724
FastDateFormat.getInstance(“yyyyMMdd”).parse(“20150429113100”);
위와 같은 내용이고요, DateFormat과 입력값의 형태가 다를 때 결과가 다르게 나옵니다.
yyyyMMdd 포맷이고,
20150429 인 경우는 정상적으로 2015/4/29로 파싱되구요(시간은 없기 때문에 00:00:00으로 됩니다)
2015 인 경우는 형식이 맞지 않아서 ParseException이 throw됩니다.
문제는 20150429113100 처럼 더 긴 문자열이 들어올 때인데, ParseException이 발생하지 않고 정상 파싱됩니다.
다만, 날짜가 81723/3/16으로 파싱됩니다.
내부 동작을 보면 정규식으로 match해서 파싱하게 되는데,
(\p{Nd{4}}+)(\p{Nd{2}+)(\p{Nd}++) 형식으로 matching합니다.
즉, yyyy(2015), MM(04), dd(나머지 즉, 29113100)입니다.
아마 날짜인 29113100을 모두 계산해서 년월일에 +하는 것으로 보입니다.
But.
위의 오동작(? – 사실 오동작이 아니라 의도가 있을지도…)은 SimpleDateFormat과 동일한 동작을 합니다.
FastDateFormat은 SimpleDateFormat을 서포트하는 용도라서 패치는 별도로 하지 않는다고 합니다.
자세한 내용은 (어설픈 영어때문에 창피하지만-ㅅ-)
https://issues.apache.org/jira/browse/LANG-1121 에 리포팅해서 답변받았습니다.
코드 변경은 없었지만, 테스트가 하나더 추가됐네요. (https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;a=commitdiff;h=cb83f7cb31e50f265e098c5380b3f0051e257f46;hp=f431270c59b6d4558da8dff625a7738591a0d541)
패치가 되었으면 더 좋았겠지만, 여기까집니다.