Я поддерживаю общую библиотеку на работе, которая выполняет много проверок заданной строки, чтобы узнать, является ли она действительной датой. Java API, библиотека commons-lang и JodaTime имеют методы, которые могут анализировать строку и включать ее в дату, чтобы сообщить вам, действительно ли она действительная дата или нет, но я надеялся, что будет такой способ делать валидацию без фактического создания объекта даты (или DateTime, как в случае с библиотекой JodaTime). Например, вот простой пример кода примера:
public boolean isValidDate(String dateString) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
try {
df.parse(dateString);
return true;
} catch (ParseException e) {
return false;
}
}
Это кажется мне расточительным, мы отбрасываем полученный объект. Из моих тестов около 5% нашего времени в этой общей библиотеке проводится проверка дат. Я надеюсь, что у меня просто отсутствует очевидный API. Любые предложения были бы замечательными!
UPDATE
Предположим, что мы всегда можем использовать один и тот же формат даты (вероятно, yyyyMMdd). Я тоже думал об использовании регулярного выражения, но тогда ему нужно было бы знать количество дней в каждом месяце, високосные годы и т.д.
Результаты
Разработал дату 10 миллионов раз
Using Java SimpleDateFormat: ~32 seconds
Using commons-lang DateUtils.parseDate: ~32 seconds
Using JodaTime DateTimeFormatter: ~3.5 seconds
Using the pure code/math solution by Slanec: ~0.8 seconds
Using precomputed results by Slanec and dfb (minus filling cache): ~0.2 seconds
Были очень творческие ответы, я ценю это! Думаю, теперь мне просто нужно решить, насколько мне нужна гибкость, чтобы я хотел, чтобы код выглядел. Я скажу, что ответ dfb правильный, потому что это был самый быстрый, который был моим оригинальным вопросом. Спасибо!