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

ama*_*ent 17 java jsr310

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

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

DateTimeFormatters.pattern("dd-MMM-yyyy");
Run Code Online (Sandbox Code Playgroud)

与"01-Jan-2012"匹配,但不与"01-JAN-2012"或"01-jan-2012"匹配.

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

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

ama*_*ent 21

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

例如

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("dd-MMM-yyyy");
DateTimeFormatter dateFormat = builder.toFormatter();
Run Code Online (Sandbox Code Playgroud)

  • 稍微整洁的第三行:builder.appendPattern("dd-MMM-yyyy"); (3认同)
  • 稍微简洁一些:大多数时候,构建器提供*返回*构建器的方法,因此您可以使用*方法链接*:`new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern...`。 (2认同)

bor*_*jab 8

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

DateTimeFormatter myFormatter = new DateTimeFormatterBuilder()
                               .parseCaseInsensitive()
                               .appendPattern("dd-MMM-yyyy")
                               .toFormatter(Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)

  • 似乎在几年前复制[已接受的答案](http://stackoverflow.com/a/10797809/642706) (3认同)

Jon*_*Jon 5

只是额外注意一下,顺序很重要。

这是不区分大小写的:

            DateTimeFormatter format = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .parseLenient()
                .appendPattern("HH:mm EEEE")
                .toFormatter(); 
Run Code Online (Sandbox Code Playgroud)

这不是:

            DateTimeFormatter format = new DateTimeFormatterBuilder()
                .appendPattern("HH:mm EEEE")
                .parseCaseInsensitive()
                .parseLenient()
                .toFormatter(); 
Run Code Online (Sandbox Code Playgroud)