Joda 날짜 및 시간 API를 사용하여 여러 형식 구문 분석
Joda를 사용하여 날짜 / 시간이 포함 된 타사 로그 파일을 구문 분석하고 있습니다. 날짜 / 시간은 내가 파싱하는 로그 파일의 나이에 따라 두 가지 형식 중 하나입니다.
현재 다음과 같은 코드가 있습니다.
try {
return DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss").parseDateTime(datePart);
} catch (IllegalArgumentException e) {
return DateTimeFormat.forPattern("E, MMM dd, yyyy HH:mm").parseDateTime(datePart);
}
이것은 작동하지만, Effective Java 2nd Edition의 Joshua Bloch의 조언에 위배됩니다 (항목 57 : 예외적 인 조건에만 예외 사용). 또한 로그 파일의 날짜 / 시간이 잘못되어 IllegalArgumentException이 발생하는지 확인하기 어렵습니다.
예외를 오용하지 않는 더 좋은 접근 방식을 제안 할 수 있습니까?
DateTimeFormatterBuilder.append 메소드 를 사용하여 여러 구문 분석기를 작성하고 빌더에 추가 할 수 있습니다 .
DateTimeParser[] parsers = {
DateTimeFormat.forPattern( "yyyy-MM-dd HH" ).getParser(),
DateTimeFormat.forPattern( "yyyy-MM-dd" ).getParser() };
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append( null, parsers ).toFormatter();
DateTime date1 = formatter.parseDateTime( "2010-01-01" );
DateTime date2 = formatter.parseDateTime( "2010-01-01 01" );
Joda-Time은 여러 파서를 지정하여이를 지원합니다 -DateTimeFormatterBuilder # append
빌더를 사용하여 두 개의 포맷터를 만들고 toParser()
각각을 호출하기 만하면 됩니다. 그런 다음 빌더를 사용하여 append
.
불행히도 나는 Joda Time이 그러한 능력을 가지고 있다고 믿지 않습니다. "tryParseDateTime"메소드가 있으면 좋지만 존재하지 않습니다.
이 행동을 자신의 클래스 (패턴 목록을 가져와 차례로 시도하는 클래스)로 분리하여 추악함이 한곳에 만 있도록하는 것이 좋습니다. 이로 인해 성능 문제가 발생하는 경우 몇 가지 휴리스틱을 사용하여 먼저 시도 할 형식을 추측 할 수 있습니다. 예를 들어, 귀하의 경우 문자열이 숫자로 시작하면 아마도 첫 번째 패턴 일 것입니다.
참고 DateTimeFormatter
Joda 시간에들 통상적으로 불변 - 당신은 새로운 당신이 줄을 구문 분석 할 때마다 생성 할 수 없습니다. 한 번 만들고 다시 사용하십시오.
참고 URL : https://stackoverflow.com/questions/3307330/using-joda-date-time-api-to-parse-multiple-formats
'Program Tip' 카테고리의 다른 글
다형성 연관에 외래 키가없는 이유는 무엇입니까? (0) | 2020.10.23 |
---|---|
Django : 사용자가 로그인 할 때 신호를 보내나요? (0) | 2020.10.23 |
egit에서 단일 파일 로컬 커밋되지 않은 변경 실행 취소 (예 : svn revert) (0) | 2020.10.23 |
Visual Studio에서 선택한 줄의 들여 쓰기를 수정하는 방법 (0) | 2020.10.23 |
node.js의 process.on ( 'SIGINT')에 해당하는 Windows는 무엇입니까? (0) | 2020.10.23 |