Проверка времени
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 11.03.08 10:24
Оценка:
Здравствуйте!

Мне надо проверить текст — является ли этот текст временем в формате HH:MM?

Для этого я делаю так:

      final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");

      Date time = null;

      try
      {
         time = TIME_FORMAT.parse(aTimeAsString);

         final Calendar calendar = Calendar.getInstance();
         int hour;
         int minute;

         calendar.setTime(time);

         hour = calendar.get(Calendar.HOUR_OF_DAY);
         minute = calendar.get(Calendar.MINUTE);

         if ((hour < 0) || (hour > MAX_HOURS) || (minute < 0) || (minute > MAX_MINUTES))
         {
            time = null;
         }
      }
      catch (ParseException exception)
      {
         time = null;
      }


Проблема в том, что такая проверка пропускает тексты вроде "27:95". Парсер считает это нормальным, и проверка с помощью календаря (calendar) тоже ничего не даёт — "25:00" переводится как "02:00".

Вопрос: Есть какой-то уже встроенный в Яву механизм, при помощи которого можно проверить текст на соответствие формату HH:mm, где HH может быть 00-23, mm — 00-59 ?

Я знаю, что можно разчленить текст (split), а потом пропарсить части, но не хочется изобретать велосипед, если его уже изобрели

Заранее благодарен

Дмитрий
Дмитрий Писаренко

http://dmitripisarenko.me
Re: Проверка времени
От: C0s Россия  
Дата: 11.03.08 10:29
Оценка: 5 (3)
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Мне надо проверить текст — является ли этот текст временем в формате HH:MM?


ДП>      final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm");

ДП>      Date time = null;
ДП>         time = TIME_FORMAT.parse(aTimeAsString);


ДП>Проблема в том, что такая проверка пропускает тексты вроде "27:95". Парсер считает это нормальным, и проверка с помощью календаря (calendar) тоже ничего не даёт — "25:00" переводится как "02:00".


1) календарь для проверки не нужен
2) см. DateFormat.setLenient
3) парсить надо с помощью parse(String s, ParsePosition pp), иначе он будет пропускать строки вида "04:56abrakadabra", а так, можно будет сравнить позицию, на которой он завершил парсинг с длиной строки
Re[2]: Проверка времени
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 11.03.08 10:37
Оценка:
Спасибо!
Дмитрий Писаренко

http://dmitripisarenko.me
Re: Проверка времени
От: RomikT Германия  
Дата: 11.03.08 15:50
Оценка: +1
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Здравствуйте!

ДП>Мне надо проверить текст — является ли этот текст временем в формате HH:MM?

Ну, в данном конкретном случае (что редко бывает с датой/временем) можно обойтись и
s.matches("([01][0-9]|2[0-3]):[0-5][0-9]")
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.