Как разобрать строки без учета регистра с помощью jsr310 DateTimeFormatter?

JSR-310 имеет удобный класс DateTimeFormatters который позволяет вам построить DateTimeFormatter, Мне особенно нравится pattern(String) метод - см. Javadoc

Тем не менее, я столкнулся с проблемой, при которой это чувствительно к регистру, например

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

соответствует "01-Jan-2012", но не "01-Jan-2012" или "01-Jan-2012".

Один из подходов состоит в том, чтобы разбить строку и проанализировать компоненты, или другой - использовать Regex для замены строк без учета регистра строк с учетом регистра.

Но такое чувство, что должен быть более легкий путь...

3 ответа

Решение

И есть... в соответствии с Руководством пользователя (в автономном режиме, см. Вместо 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(); 
Другие вопросы по тегам