devxlogo

Prevent Lenient Date Parsing

Prevent Lenient Date Parsing

The java.text.DateFormat class and its java.util.SimpleDateFormat subclass are useful for formatting and parsing date and time values. For example, your application may allow a user to enter a date value and then use SimpleDateFormat to process it and return an instance of java.util.Date. When DateFormat attempts to process a string representation of a date using the parse() method, it normally throws an exception if the string does not represent a valid date. However, there are some cases where DateFormat will not throw an exception when parse() is passed an invalid date. For example:

 import java.util.*;import java.text.*;public class BadDate {	public static void main(String[] args)throws Exception {		SimpleDateFormat sdf =new SimpleDateFormat("MM/dd/yyyy");		Date d = sdf.parse("02/09/hello");		System.out.println("Converted to " + d);	}  // public static void main()}  //  public class BadDate

Since this code attempts to parse a string with an invalid year (“hello”), you might expect it to throw an exception. In fact, it does not, and generates output similar to:

 Converted to Mon Feb 09 00:00:00 CST 0001

Note that what should have been the year portion of the date string (“hello”) was incorrectly translated to a value of 0001. So although parse() was passed an invalid date, it failed to throw an exception. However, there is an explanation for this behavior and a simple remedy for it.

By default, DateFormat instances use a “lenient” mode when parsing dates, and in some cases will try to “guess” what was intended when the date string is invalid. You can disable this feature by calling the DateFormat’s setLenient() method. For example, to successfully detect the invalid date in the sample code, insert this line prior to the call to the parse() method:

 sdf.setLenient(false);

This disables lenient mode for the DateFormat instance, and will cause a ParseException to be thrown instead of incorrectly parsing the invalid date. You can use this approach to ensure that your code always detects invalid date strings.

devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist