java.time и ThreeTen Backport
DateTimeFormatter timeFormatter
= DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
String time24Hour = "12:10:00";
LocalTime time = LocalTime.parse(time24Hour);
String time12Hour = time.format(timeFormatter);
System.out.println(time12Hour);
Вывод этого фрагмента соответствует ожидаемому:
12: 10 вечера
Обратите внимание, что строка шаблона формата hh:mm a
правильна для форматирования . Я не знаю, что вы использовали для анализа, я подозреваю, что ваша ошибка, возможно, была там.
Я добавил локаль в форматтер, чтобы контролировать, какой язык я получу. Поскольку AM и PM практически не используются на других языках, кроме английского, я выбрал Locale.ENGLISH
, но, пожалуйста, выберите подходящий вам язык.
Класс SimpleDateFormat
, который вы использовали, общеизвестно хлопотен и к счастью давно устарел. Вместо этого я использую java.time, современный Java-интерфейс даты и времени. Это дает дополнительный бонус, заключающийся в том, что синтаксический анализ 24-часового формата проходит гладко без явного форматера. Это связано с тем, что полученный формат соответствует стандарту ISO 8601, международному стандарту даты и времени. Современные классы разбирают (а также печатают) формат ISO 8601 по умолчанию.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) встроен современный API.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется версия Android ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки