如何使用jsr310 DateTimeFormatter解析不区分大小写的字符串?

jsr-310有一个方便的类DateTimeFormatters ,它允许你构造一个DateTimeFormatter 。 我特别喜欢pattern(String)方法 – 请参阅javadoc

但是,我遇到了一个问题,即这是区分大小写的 – 例如

 DateTimeFormatters.pattern("dd-MMM-yyyy"); 

与“01-Jan-2012”匹配,但不与“01-JAN-2012”或“01-jan-2012”匹配。

一种方法是断开字符串并解析组件,或者另一种方法是使用Regex用区分大小写的字符串替换不区分大小写的字符串。

但感觉应该有一个更简单的方法……

并且有…根据用户指南 (离线,请参阅JavaDoc ),您应该使用DateTimeFormatterBuilder来构建复杂的DateTimeFormatter

例如

 DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); builder.parseCaseInsensitive(); builder.appendPattern("dd-MMM-yyyy"); DateTimeFormatter dateFormat = builder.toFormatter(); 

此替代方法可用于初始化静态变量:

 DateTimeFormatter myFormatter = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("dd-MMM-yyyy") .toFormatter(Locale.ENGLISH); 

只是额外注意,订单很重要。

这不区分大小写:

  DateTimeFormatter format = new DateTimeFormatterBuilder() .parseCaseInsensitive() .parseLenient() .appendPattern("HH:mm EEEE") .toFormatter(); 

这不是:

  DateTimeFormatter format = new DateTimeFormatterBuilder() .appendPattern("HH:mm EEEE") .parseCaseInsensitive() .parseLenient() .toFormatter();