SimpleDateFormat AM / PM преобразование - PullRequest
1 голос
/ 08 марта 2019

Итак, я пытаюсь добавить AM / PM к 12:10:00.Ниже приведен код, который я использую

SimpleDateFormat timeToString = new SimpleDateFormat("hh:mm a");

Я понимаю, hh означает 12 часов, а HH - 24 часа.

Но когда я положил вышеупомянутое значение в

String dateStr = timeToString.format(time);

Это дает мне 12:10 am

Не должно 00:10:00 быть 12:00 am?

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

Не следует ли 12:10 преобразовать в 12:10 PM?

Если да, то как мне это сделать.Если нет, то как обходится?

Ответы [ 2 ]

3 голосов
/ 08 марта 2019

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 с подпакетами.

Ссылки

0 голосов
/ 08 марта 2019

На самом деле есть два компонента, которые вы можете использовать для отображения 12-часового формата:

  • K для «Час в час / час (0-11)» ->будет отображаться: 00:50 PM
  • h для «Час в час / час (1-12)» -> будет отображаться: 12:50 PM

Здесь все работает как положено.Теперь вы должны использовать формат, который подходит вам лучше всего.

...