Здравствуйте!
Мне надо проверить текст — является ли этот текст временем в формате 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), а потом пропарсить части, но не хочется изобретать велосипед, если его уже изобрели
Заранее благодарен
Дмитрий
Здравствуйте, Дмитрий Писаренко, Вы писали:
ДП>Мне надо проверить текст — является ли этот текст временем в формате 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", а так, можно будет сравнить позицию, на которой он завершил парсинг с длиной строки
Здравствуйте, Дмитрий Писаренко, Вы писали:
ДП>Здравствуйте!
ДП>Мне надо проверить текст — является ли этот текст временем в формате HH:MM?
Ну, в данном конкретном случае (что редко бывает с датой/временем) можно обойтись и
s.matches("([01][0-9]|2[0-3]):[0-5][0-9]")