Quiero usar joda para analizar las cadenas de fecha y hora en los correos electrónicos. Por desgracia consigo todo tipo de formatos diferentes, por ejemplonecesita conversión flexible de fecha y hora con joda
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
El código de abajo atrapa la mayor parte de las variantes, pero no todos (por ejemplo, cuando hay dos espacios en lugar de uno, cuando la coma no se encuentra, etc.) . Y parece incómodo.
¿Hay una forma más elegante de manejar esto? Por favor avise.
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]);
}
La miniconeta z no se analizará en Joda-Time, ya que las tres abreviaturas de las letras son ambiguas – JodaStephen