Принятие только действительного времени - PullRequest
4 голосов
/ 25 февраля 2010

Хорошо, поэтому в Java я хочу попросить пользователя указать время в 24-часовом формате. Мне удалось использовать DateFormat и SimpleDateFormat, чтобы сообщить ему, в каком формате вводится время, и затем соответствующим образом интерпретировать его, создав исключение, если оно не соответствует этому формату. Вот что у меня есть:

DateFormat fmt = new SimpleDateFormat("HH:mm");
Scanner keyboard = new Scanner(System.in);

try {
    String input = keyboard.nextLine();
    Date theDate = fmt.parse(input);
    System.out.println(theDate.toString());
} catch (ParseException e) {
    System.out.println("Incorrect format!");
    e.printStackTrace();
}

Если я наберу слово, оно действительно выдает исключение. Однако, если я наберу что-то вроде 234234:2342342, оно на самом деле идет и выполняет математические вычисления, чтобы выяснить, сколько дней равняются этим часам и минутам, а затем выводит фактическую дату. Например, с учетом ввода:

input: 23423423:232323
output: Fri Jul 29 07:03:00 PDT 4642

Мне интересно, есть ли способ трактовать это как исключение. Поэтому я хочу принять только то, что указано в средствах форматирования (H 0-23 и m 0-59), и, если оно не попадает в эти границы, сгенерировать исключение или иметь какой-либо способ узнать. Я хотел бы знать, есть ли способ сделать это с помощью классов форматирования, которые я использую, или это должно быть сделано с использованием класса Scanner (как?), Или если мне нужно написать код синтаксического анализа и проверки самостоятельно , Я подхожу к этому совершенно неправильно? В настоящее время я просто пробую возможности, поэтому, если есть лучший способ, пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

7 голосов
/ 25 февраля 2010

Я понял это, используя DateFormat 's setLenient метод.

fmt.setLenient(false);

Теперь набираем все, что не соответствует формату (час = 0 до23 и минуты = от 0 до 59) выдает исключение:)

...