Как мне преобразовать "20 ноября 2016 г., 12:00:00" в LocalDateTime?

Я нашел очень интересную ошибку или что-то в этом роде.

Я использую этот формат даты MMM d, yyyy hh:mm:ss a и он напечатает дату, подобную этой

Aug 13, 2020 01:19:50 pm

Но когда я разбираю Nov 20, 2016 12:00:00 AM к LocalDateTime, это вызывает исключение

java.time.format.DateTimeParseException: Text 'Nov 20, 2016 12:00:00 AM' could not be parsed at index 22.

После того, как я изменил "AM" на "am", все работает отлично! такLocalDateTimeбуквально не может разобрать дату из-за прописных букв a̶p̶e̶s̶? И как мне решить эту проблему, не заменяя "AM" на "am" и "PM" на "pm"

РЕДАКТИРОВАТЬ

SimpleDateTime формат не имеет этой проблемы, он игнорирует регистр букв a̶p̶e̶s̶ (я имею в виду верхний или нижний регистр) И я не хотел бы преобразовывать Date к LocalDateTime

РЕДАКТИРОВАТЬ 2

MMM d, yyyy hh:mm:ss A заменить "а" на "а" тоже не сработало

1 ответ

Решение

Вам нужно проанализировать его без учета регистра. Также убедитесь, что вы используете английский язык (например,Locale.ENGLISH, Locale.US и т. д.), потому что имена элементов представлены локализованными строками в соответствующих языковых стандартах.

Демо:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Given date-time string
        String strDateTime = "Nov 20, 2016 12:00:00 AM";

        // Define the formatter
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                        .parseCaseInsensitive()
                                        .appendPattern("MMM d, u h:m:s a")                                       
                                        .toFormatter(Locale.ENGLISH);                                     

        // Parse the given date-time into LocalDateTime using formatter
        LocalDateTime ldt = LocalDateTime.parse(strDateTime, formatter);

        System.out.println(ldt);
    }
}

Выход:

2016-11-20T00:00
Другие вопросы по тегам