joda를 사용하여 전자 메일에서 datetime 문자열을 구문 분석하고 싶습니다. 불행하게도 내가 예를 들어, 서로 다른 형식의 모든 종류를 얻을 수은 joda로 유연한 datetime 변환이 필요합니다.
Wed, 19 Jan 2011 12:52:31 -0600
Wed, 19 Jan 2011 10:15:34 -0800 (PST)
Wed, 19 Jan 2011 20:03:48 +0000 (UTC)
Wed, 19 Jan 2011 17:02:08 -0600 (CST)
Fri, 21 Jan 2011 10:39:55 +0100 (CET)
Fri, 21 Jan 2011 17:50:42 -0500 (EST)
Wed, 06 Apr 2011 15:38:25 GMT
Thu, 7 Apr 2011 11:38:24 +0200
Fri, 8 Apr 2011 05:13:36 -0700 (MST)
20 Apr 2011 03:00:46 -0400
코드는 아래 잡는다 변형 대부분의 전부는 아니지만 (예를 들어, 하나가 아닌 두 개의 공백이있을 때 쉼표 등이 없을 때) . 그리고 그것은 어색해 보인다.
더 좋은 방법이 있나요? 제발 조언. 자신을 Joda의 DateTimeParser
을 사용하고 기본적으로 자신이 (내가 많은 일이 될 것이라고 생각) 유효한 날짜 시간을 구축 텍스트, 난 당신의 접근 방식에 정말 많은 잘못이 있다고 생각하지 않습니다 구문 분석
DateTimeParser[] parsers = {
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(CET)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(CST)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(CEST)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(GMT)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(MST)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(PST)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(UTC)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(EST)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(EDT)'").getParser(),
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z '(CDT)'").getParser(),
};
DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder().append(null, parsers).toFormatter();
try {
calendar = inputFormatter.withLocale(Locale.US).parseDateTime(date[0]);
}
catch(Exception e) {
System.out.println("problem with " + date[0]);
}
세 문자 약어가 모호하기 때문에 소문자 z는 Joda-Time에서 구문 분석되지 않습니다. – JodaStephen