Najszybszy sposób na określenie, czy ciąg jest prawidłową datą

Obsługuję wspólną bibliotekę w pracy, która wykonuje wiele sprawdzeń danego ciągu, aby sprawdzić, czy jest to poprawna data. Java API, biblioteka commons-lang i JodaTime mają metody, które mogą analizować łańcuch i przekształcić go w datę, aby poinformować Cię, czy jest to właściwie poprawna data, czy nie, ale miałem nadzieję, że będzie sposób sprawdzania poprawności bez faktycznego tworzenia obiektu daty (lub DateTime, jak w przypadku biblioteki JodaTime). Na przykład tutaj jest prosty przykładowy kod:

public boolean isValidDate(String dateString) {
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse(dateString);
        return true;
    } catch (ParseException e) {
        return false;
    }
}

To wydaje mi się marnotrawstwem, wyrzucamy wynikowy obiekt. Z moich testów około 5% naszego czasu w tej wspólnej bibliotece spędza na sprawdzaniu dat. Mam nadzieję, że brakuje mi oczywistego API. Wszelkie sugestie byłyby świetne!

AKTUALIZACJA

Załóżmy, że zawsze możemy zawsze używać tego samego formatu daty (prawdopodobnie rrrrMMdd). Pomyślałem też o użyciu wyrażenia regularnego, ale wtedy musiałbym być świadomy liczby dni w każdym miesiącu, latach przestępnych itp.

Wyniki

Analizowałem datę 10 milionów razy

Using Java's SimpleDateFormat: ~32 seconds 
Using commons-lang DateUtils.parseDate: ~32 seconds
Using JodaTime's 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

Są bardzo kreatywne odpowiedzi, doceniam to! Myślę, że teraz muszę tylko zdecydować, ile elastyczności potrzebuję, aby kod wyglądał. Powiem, że odpowiedź dfb jest poprawna, ponieważ była to najszybsza odpowiedź na moje pytania. Dzięki!

questionAnswers(8)

yourAnswerToTheQuestion