Преобразование моей строки в LocalTime с шаблонами - PullRequest
4 голосов
/ 03 июля 2019

Я хотел преобразовать свою строку в формат LocalTime

    String s = "1時30分:00";
    String ss = s.replace("時", ":").replace("分", ":");
    DateTimeFormatter timeColonFormatter = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("hh:mm a").toFormatter(Locale.JAPAN);
    System.out.println(timeColonFormatter);
    LocalTime colonTime = LocalTime.parse("3:30 am", timeColonFormatter);
    System.out.println(colonTime);

Я получил ошибку:

Исключение в потоке "main" java.time.format.DateTimeParseException: Text '3:30'невозможно проанализировать с индексом 0

Ожидаемый результат:

3: 30 AM

1 Ответ

5 голосов
/ 03 июля 2019

В вашем паттерне у вас есть двузначный час, и, поскольку ваш регион - Япония, вы должны использовать японский эквивалент AM / PM, который равен 午前 / 午後 соответственно, например:

LocalTime.parse("03:30 午前", timeColonFormatter);
LocalTime.parse("03:30 午後", timeColonFormatter);

Вы также можете принимать однозначные значения времени с шаблоном "h:mm a".

Редактировать: Вы также можете анализировать японское время напрямую, без необходимостипреобразовать в полумеждународный формат, например, используя шаблон "h時mm分 a":

LocalTime colonTime = LocalTime.parse("3時30分 午前", timeColonFormatter);

или, в правильном японском порядке, с шаблоном "ah時mm分":

LocalTime colonTime = LocalTime.parse("午前3時30分", timeColonFormatter);
...