anonymous
anonymous

Reputation: 41

Is this a Java DateFormat bug?

The pattern is "dd-MM-yyyy"

I think the string "01-01-2010mwwwwwwwwwwwwwww" does not satisfy the pattern, but the following code shows the contrary.

Anyone can explain why?

public static void main(String[] args) throws Exception {

    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");

    Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww");

    System.out.println(date);
}

Thanks

Upvotes: 4

Views: 1408

Answers (2)

Hendra Jaya
Hendra Jaya

Reputation: 1628

It's because the default lenient parameter for DateFormat is true. This means the parser will parse input string even though it's in incorrect format. Which will (sometime) lead to incorrect result.

On the other hand, we can force the parser to be strict to given pattern. This means an incorrect input string will throw an exception.

public static void main(String[] args) throws Exception {
  SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
  df.setLenient(false); // Switch to strict mode
  Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww"); // This will throw an exception
  System.out.println(date);
}

Upvotes: 0

aioobe
aioobe

Reputation: 420951

The parse method does not try to match the entire input string. That is, the prefix 01-01-2010 matches, and that's enough.

From DateFormat.parse:

Parses text from the beginning of the given string to produce a date. The method may not use the entire text of the given string.


If you need to figure out if it was a "complete match", you could try the following:

SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");

String strDate = "01-01-2010mwwwwwwwwwwwwwww";
ParsePosition pp = new ParsePosition(0);
Date date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));

strDate = "01-01-2010";
pp = new ParsePosition(0);
date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));

This prints

Complete match: false
Complete match: true

Upvotes: 16

Related Questions