Java DateFormat.parse thinks "100 112TH AVE NE" is a date

date, date-format, java, simpledateformat

Solution

The `parse` method does not verify that the entire string was consumed when parsing; you can have random garbage after a valid date and everything works. In this case, it's a little surprising that `100 112` can be successfully parsed as a date, but it can.

You can supply a `ParsePosition` to verify that the entire string was consumed when parsing.

ParsePosition pos = new ParsePosition(0);
dfyyyyMMdd.parse(aValue, pos);
if (pos.getIndex() != aValue.length()) {
    // there's garbage at the end
}

Problem

I'm using the code included here to determine whether given values are valid dates. Under one specific case, it's evaluating the following street address: 100 112TH AVE NE Obviously not a date, but Java interprets it as: Sun Jan 12 00:00:00 EST 100 The code in question: ``` String DATE_FORMAT = "yyyyMMdd"; try { DateFormat dfyyyyMMdd = new SimpleDateFormat(DATE_FORMAT); dfyyyyMMdd.setLenient(false); Date formattedDate; formattedDate = dfyyyyMMdd.parse(aValue); console.debug(String.format("%s = %s","formattedDate",formattedDate)); } catch (ParseException e) { // Not a date } ``` The console returns: 11:41:40.063 DEBUG TestValues | formattedDate = Sun Jan 12 00:00:00 EST 100 Any idea what's going on here?

Original source

Related problems