Johnny Willer
Johnny Willer

Reputation: 3917

Two-digit year in SimpleDateFormat

Maybe this question is fool, but I didn't have found any answer that has satisfied me.

I have a SimpleDataFormat like:

sdf = new SimpleDateFormat("dd/MM/yyyy");

And if I try to parse a date like: 10/10/15

Then the Date result is for year 15, and not 2015.

Why the parse works in this case? I was expecting a ParseException

How I force the user to put year in 4 digit format? (Without String.length() please)

I'm using setLenient(false)

Upvotes: 2

Views: 3658

Answers (2)

InkyDigits
InkyDigits

Reputation: 3228

Your date is interpreted literally. Per http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

"For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D."

This is also why you didn't get the exception that you expected.

Upvotes: 4

Harsh Poddar
Harsh Poddar

Reputation: 2554

This is because when you say dd/MM/yyyy, java expects you to provide the 'full year', but its not necessary that it has to be 4-digit years. Its similar to MMMMM - this doesn't mean you want only 5 characters of the month, it means you want the full month name. I believe you will have to use String.length(), or you may parse it and check for date range.

Upvotes: 2

Related Questions