java .time
Я рекомендую использовать java .time, современный Java API даты и времени, а не вашу собственную реализацию календаря. Его можно использовать во всех языках.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
String timeString12Hours = "12:15PM";
LocalTime time = LocalTime.parse(timeString12Hours, formatter);
System.out.println("Time: " + time);
int hour = time.getHour();
System.out.println("Hour of day in 24 hour format: " + hour);
Результат:
Time: 12:15
Hour of day in 24 hour format: 12
То, что мы получаем бесплатно от java .time, - это проверка. Этот код определит, если meridiem
не равно AM
или PM
, или час находится за пределами диапазона от 1 до 12, или вообще не является числом.
Ни при каких обстоятельствах не используйте SimpleDateFormat
класс, упомянутый в вопросе. Это печально известный возмутитель спокойствия в своем классе и давно устарел.
Изменить: Если для совместимости со старым кодом, которого я не знаю, и что у вас нет времени убрать как только вам понадобится подпись метода из вашего собственного ответа:
private static DateTimeFormatter meridiemHourFormatter
= DateTimeFormatter.ofPattern("ahh", Locale.ENGLISH);
public static int convert12to24(String meridiem, String hour) {
String meridiemHour = meridiem + hour;
return LocalTime.parse(meridiemHour, meridiemHourFormatter).getHour();
}
Пробуем:
System.out.println(convert12to24("PM", "12"));
12
Каждый читатель может решить для себя: реализация какого метода требует меньше энергии, чтобы понять, торопитесь ли вы, ваш или мой?
Ссылка: Oracle учебник: Дата Время объяснение как использовать java .time.