java.time
Чтобы получить текущий час в 12-часовом формате и текущую минуту часа в виде значений int
:
LocalTime currentTime = LocalTime.now(ZoneId.of("Asia/Qatar"));
int currentHours = currentTime.get(ChronoField.HOUR_OF_AMPM);
int currentMinutes = currentTime.getMinute();
System.out.println("Current time of the day using LocalTime - 12 hour format: "
+ currentHours + " HOURS " + currentMinutes + " MINUTES");
Выход при работе только сейчас был:
Текущее время дня с использованием LocalTime - 12-часовой формат: 11 ЧАСОВ 52 МИНУТ
Пожалуйста, замените желаемый часовой пояс , куда я положилАзия / Катар.
currentTime.get(ChronoField.HOUR_OF_AMPM)
дает вам час от 0 до 11. Если вы хотите 12 вместо 0, просто используйте ChronoField.CLOCK_HOUR_OF_AMPM
вместо ChronoField.HOUR_OF_AMPM
.
Что пошлонеправильно в вашем коде?
Сначала вы использовали старые классы даты и времени Date
и SimpleDateFormat
.Они плохо спроектированы и давно устарели, так что не делайте этого.Вместо этого я использую java.time, современный Java-интерфейс даты и времени.Вы, возможно, уже заметили, как это также значительно упрощает ваш код (в сочетании со следующим пунктом).
Во-вторых, вы форматировали часы и минуты только для их анализа.Это объезд.Не делайте этого.
В-третьих, как правильно указывают другие ответы, вы пытались проанализировать strDateFormat2
, переменную, содержащую шаблон формата mm
, вместо строки, содержащей число.Полученное вами сообщение об исключении For input string: "mm "
пытается вам это сказать.Аналогично для часов.
В-четвертых, как правильно говорит Теджас Джагтап, Integer.parseInt
откажется анализировать строку с завершающим пробелом.
Ссылка
Руководство по Oracle: Date Time , объясняющее, как использовать java.time
, современный Java-интерфейс даты и времени.