Я хочу использовать 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
Приведенный ниже код улавливает большинство вариантов, но не все (например, когда есть два пробела вместо одного, когда запятая отсутствует и т.д.). И это выглядит просто неудобно.
Есть ли более элегантный способ справиться с этим? Просьба сообщить.
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]);
}