jsr-310 has a handy class DateTimeFormatters
which allows you to construct a DateTimeFormatter
. I particularly like the pattern(String)
method - see javadoc
However, I hit a problem whereby this is case sensitive -- e.g.
DateTimeFormatters.pattern("dd-MMM-yyyy");
matches with "01-Jan-2012", but not with "01-JAN-2012" or "01-jan-2012".
One approach would be to break the string down and parse components, or another would be to use Regex to replace the case-insensitive strings with the case-sensitive string.
But it feels like there ought to be an easier way...
And there is... according to the User Guide (offline, see JavaDoc instead), you should use DateTimeFormatterBuilder
to build a complex DateTimeFormatter
e.g.
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("dd-MMM-yyyy");
DateTimeFormatter dateFormat = builder.toFormatter();
This alternative is usefull for initializating static variables:
DateTimeFormatter myFormatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd-MMM-yyyy")
.toFormatter(Locale.ENGLISH);
Just an extra Note, the order matters.
This is case insensitive:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseLenient()
.appendPattern("HH:mm EEEE")
.toFormatter();
This is not:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.appendPattern("HH:mm EEEE")
.parseCaseInsensitive()
.parseLenient()
.toFormatter();