https://edgblog.wordpress.com/2014/02/17/jodatime-goodies-flexible-parsing/
JodaTime goodies – flexible parsing
Leave a reply
Parsing dates in Java with JodaTime is easy.
1. instantiate a date time formatter
1
2
| DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern( "yyyyMMddHH:mm:ss.SSS" ) ; |
2. …and parse the date time
1
| dateTimeFormatter.parseDateTime( "20120515 09:30:25.123" ) ; |
3. but when the date time format changes (say to include a timezone)…alarm bells.
1
2
3
4
| dateTimeFormatter.parseDateTime( "20120515 09:30:25.123 +0000" ) ; //results in// java.lang.IllegalArgumentException: Invalid format: "20120515 09:30:25.123 +0000" is malformed at " +0000" |
4. Fortunately the JodaTime api includes a DateTimeFormatterBuilder which can be used to build a dateTimeFormatter customised with multiple printers and parsers.
1
2
3
4
5
6
7
8
9
10
11
| DateTimeFormatter dateTimeFormatter= DateTimeFormat.forPattern( "yyyyMMddHH:mm:ss.SSS" ) ; DateTimeFormatter dateTimeFormatterWithTimeZone= DateTimeFormat.forPattern( "yyyyMMdd HH:mm:ss.SSS Z" ); DateTimeFormatter optionalTimeZoneFormatter= new DateTimeFormatterBuilder() .append( null , //because no printing is required new DateTimeParser[]{dateTimeFormatter.getParser(), dateTimeFormatterWithTimeZone.getParser()}).toFormatter(); |
5. now the same DateTimeFormatter handles different date time formats
1
2
| optionalTimeZoneFormatter.parseDateTime( "20120515 09:30:25.123" ) ; optionalTimeZoneFormatter.parseDateTime( "20120515 09:30:25.123 +0000" ) ;
|