Schnellste Möglichkeit, um festzustellen, ob eine Zeichenfolge ein gültiges Datum ist

Unterstütze ich eine gemeinsame Bibliothek bei der Arbeit, dass führt viele Kontrollen aus einer angegebenen Zeichenfolge, um zu sehen, ob es ein gültiges Datum ist. Die Java-API, commons-lang-library, und JodaTime haben alle Methoden, die Parsen einen string und ein Datum, damit Sie wissen, ob es sich tatsächlich um ein gültiges Datum ist oder nicht, aber ich hatte gehofft, dass es wäre eine Art zu tun, der Validierung, ohne tatsächlich die Schaffung eines date-Objekt (oder DateTime-wie ist der Fall mit der JodaTime-Bibliothek). Zum Beispiel hier ist ein einfaches Stück Beispiel-code:

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

Scheint es einfach verschwenderisch zu mir, wir werden wegwerfen die resultierende Objekt. Aus meinen benchmarks etwa 5% unserer Zeit in diesem gemeinsamen Bibliothek verbracht Validierung der Daten. Ich hoffe, ich bin nur fehlt eine offensichtliche API. Irgendwelche Vorschläge wäre toll!

UPDATE

Davon ausgehen, dass wir immer das gleiche Datumsformat zu allen Zeiten (wahrscheinlich JJJJMMTT). Ich dachte über die Verwendung von regex, aber dann würde es brauchen, um sich bewusst von der Anzahl der Tage in jedem Monat, Schaltjahre, usw...


Ergebnisse

Analysiert eine Datum 10 Millionen mal

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

Gab es einige sehr kreative Antworten, ich weiß es zu schätzen! Ich denke, jetzt brauche ich nur zu entscheiden, wie viel Flexibilität, die ich brauche, was ich will, der code Aussehen soll. Ich werde sagen, dass der dfb die Antwort ist richtig, denn es war rein der Schnellste, das war meine ursprüngliche Frage. Danke!

Kommentare dem Thema
Auslösen von Ausnahmen eher "heavy". Haben Sie sich überlegt mit Hilfe von regulären Ausdrücken für die Validierung ? Kommentarautor: James P.
Gut, eine Sache, die Sie tun könnten, wenn Sie am Ende mit vielen der gleichen strings zu validieren, ist eine Art von memoization Technik. Kommentarautor: JRL
Europäische Datumsformat (TT/MM/JJJJ) oder das US-Datumsformat (MM/DD/YYYY)? Viel Glück. Kommentarautor: James
Ich glaube, du hast Recht. Aber überprüfen die Zeichenfolge, die Sie benötigen würde, einen regex. Dann ist diese regex muss sich bewusst sein, das format von Datum. Wenn Sie mehr als ein format des Datums in das system, müssen Sie 2 Methoden zum validieren von Daten oder übergeben Sie die regex für jede Methode zusammen mit dem string Datum. Trotzdem, es würde mich ein Chaos. Kommentarautor: Tiago Farias
Hinzugefügt ein update für einige dieser Fragen. Kommentarautor: jjathman

InformationsquelleAutor der Frage jjathman | 2012-07-14

Schreibe einen Kommentar