java.time
В Java есть встроенный класс, представляющий время дня LocalTime
, и средства для разбора строки в LocalTime
и ее форматирования обратно в строку. Так что да, чтение времени как 934 или 1800 идет хорошо, и нет никакой причины для ручного форматирования, как вы делали в вопросе.
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("Hmm");
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("H'h'mm");
LocalTime minTime = LocalTime.of(9, 0);
LocalTime maxTime = LocalTime.of(18, 0);
String userInput = "1800";
LocalTime time = LocalTime.parse(userInput, inputFormatter);
if (time.isBefore(minTime) || time.isAfter(maxTime)) {
System.out.println("TODO put your error message here");
} else {
String output = time.format(outputFormatter);
System.out.println("Debut de la location: " + output);
}
Вывод из фрагмента кода примера:
Debut de la location: 18:00
Здесь может удивить одна деталь: строка шаблона входного формата Hmm
обычно будет означать ввод трех цифр, одного цифры часа дня и двухзначной минутычасаОднако, когда Java видит, что есть четыре цифры, а не три, так как она знает, что час дня может иногда требовать двух цифр, она достаточно умна, чтобы понять, что 1800
- это двузначный час, 18 и двузначная минута, 00.
В шаблоне выходного формата, H'h'mm
, одинарные кавычки вокруг h
означают, что эта буква должна быть напечатана буквально, это не буква шаблона формата, такая как H
и mm
.
Если вы можете, я рекомендую вам прочитать ввод как String
, а не int
.
Если пользователь ввел время, которое не соответствуетс указанным, например, неправильным форматом или минутой часа, превышающей 59, LocalTime.parse
выдаст DateTimeParseException
, поэтому вы захотите перехватить это исключение, выдать сообщение об ошибке и попросить пользователя повторить попытку.
Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.