Но есть ли какой-либо способ для анализа времени без изменения строки источника?
Да, этот форматтер может сделать это для вас:
Map<Long, String> ampmStrings = Map.of(0L, "a", 1L, "p");
DateTimeFormatter timeFormatter = new DateTimeFormatterBuilder()
.appendPattern("hh:mm")
.appendText(ChronoField.AMPM_OF_DAY, ampmStrings)
.toFormatter();
С помощью DateTimeFormatterBuilder.appendText
мы можем определить наши собственные тексты для форматирования и синтаксического анализа.Я использовал Java 9+ Map.of
для инициализации карты двух пар ключ-значение.Если вы используете Java 6, 7 или 8, я верю, что вы инициализируете карту по-другому.Остальное все равно должно работать.
Давайте попробуем:
String sourceLine = "10:00a";
LocalTime time = LocalTime.parse(sourceLine, timeFormatter);
System.out.println("Parsed time: " + time);
Вывод:
Время анализа: 10: 00
Еще лучшим вариантом было бы, если бы вы могли убедить свой источник предоставить строки в формате ISO 8601 (например, 10:00
и 19:30
).