2017-08-30 6 views
-2

J'ai le code suivant pour vérifier si une date donnée est valideJava - Vérifiez si une date est valable pour une donnée dateformat

SimpleDateFormat fromformatter = new SimpleDateFormat("MMYY"); 
fromformatter.setLenient(false); 

try { 
    fromformatter.parse(dateString); 
    valuesQuery.append("'" + dateString+ "',"); 
} catch (ParseException pe) { 
    pe.printStackTrace(); 
    valuesQuery.append("'notDate" + dateString+ "',"); 
} 

Maintenant, quand je reçois dateString = "1803"; qui n'est pas une date valide, aucune exception Est lancé. Le format de date utilisé ici est MMYY.

Qu'est-ce que je fais de mal?

Notez qu'une regex ne m'aidera pas car le format de date changera.

+0

Copie possible de [Parse aaaa/mm/jj à l'horodatage à l'aide de SimpleDateFormat in java] (https://stackoverflow.com/questions/24217408/parse-yyyy-mm-dd-to-epoch-timestamp-using- simpledateformat-in-java) –

+2

'm' est pour minutes,' M' est pour mois: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html –

+0

J'ai essayé deux combinaisons de MMYY, MMyy. Il ne prend pas l'exception pour 1803 – keanu

Répondre

1

java.time

Utilisez les classes de java.time modernes plutôt que les classes date de temps anciens gênants.

Spécifiquement utiliser le YearMonth pour représenter de telles valeurs. Sa méthode parse lève une exception pour une entrée invalide.

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMuu") ; 
try { 
    YearMonth ym = YearMonth.parse("1803" , f) ; 
} catch (DateTimeParseException e) { 
    … handle error. 
} 

CONSEIL: Si possible, utilisez ISO 8601 formats standard plutôt que ce format particulier. Pour l'année-mois, il s'agit de YYYY-MM, par exemple 2017-07.