2010-02-25 2 views
4

Хорошо, поэтому на 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 (как?) Или мне самому написать код синтаксического анализа и проверки , Я подхожу к этому совершенно неправильно? В настоящее время я просто пытаюсь использовать возможности, поэтому, если есть лучший способ, дайте мне знать.

Спасибо!

ответ

7

Я понял, используя DateFormatsetLenient метод.

fmt.setLenient(false); 

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

+2

Я думаю, что вы собираетесь получить Атман -Личный значок :) – Dolph