I've made tests with JodaTime 2.7 and found 2 ways to do it:
Use
DateTimeFormatterBuilder
's optional parsers:// create parser for "GMT" DateTimeParser gmtParser = DateTimeFormat.forPattern("ZZZ").getParser(); // create parser for "+0200" DateTimeParser offsetParser = DateTimeFormat.forPattern("Z").getParser(); DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("EEE, dd MMM yyyy HH:mm:ss ") // common pattern .appendOptional(gmtParser) // optional parser for GMT .appendOptional(offsetParser) // optional parser for +0200 .toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();
DateTimeFormatterBuilder
can receive an array of parsers that can be used to parse different inputs:// create array with all possible patterns DateTimeParser[] parsers = { DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z").getParser(), DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss ZZZ").getParser() }; // create a formatter using the parsers array DateTimeFormatter formatter = new DateTimeFormatterBuilder() .append(null, parsers) // use parsers array .toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();
Using any of the solutions above, the formatter
will work with both inputs:
System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 13:00:00 GMT"));
System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 15:00:00 +0200"));
The output will be:
2002-10-02T13:00:00.000Z
2002-10-02T15:00:00.000+02:00
Note: I believe the first solution is better if you have a common part among all patterns and little variation between them. The second solution is better if the patterns are very different from each other. But I also believe it's a matter of opinion and it's up to you to choose.