Using Joda Date & Time API to parse multiple formats Using Joda Date & Time API to parse multiple formats java java

Using Joda Date & Time API to parse multiple formats


You can create multiple parsers and add them to the builder by using DateTimeFormatterBuilder.append method:

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 supports this by allowing multiple parsers to be specified - DateTimeFormatterBuilder#append

Simply create your two formatters using a builder and call toParser() on each. Then use the builder to combine them using append.


Unfortunately I don't believe Joda Time has any such capabilities. It would be nice to have a "tryParseDateTime" method, but it doesn't exist.

I suggest you isolate this behaviour into your own class (one which takes a list of patterns, and will try each in turn) so that the ugliness is only in one place. If this is causing performance issues, you might want to try to use some heuristics to guess which format to try first. For example, in your case if the string starts with a digit then it's probably the first pattern.

Note that DateTimeFormatters in Joda Time are conventionally immutable - you shouldn't be creating a new one each time you want to parse a line. Create them once and reuse them.