Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to differentiate between parse exception and invalid date range

Tags:

java

I have this simple program I've written

try{
    SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yyyy");
    sdf.setLenient(false);
    //Date date = sdf.parse("1/14/1999"); Apologies for confusion
    Date date = sdf.parse(request.getParameter("selectedDate"));
}catch(ParseException ex){
    ex.printStackTrace();
}

From what I understand a ParseException will be thrown if the date is out of range or the format given is wrong. I want to be able to tell them apart. How can I can achieve this ?

Edit: When I said out of range I meant something like this 15/15/1999. That's why setLenient(false)

like image 811
Andy Avatar asked Mar 06 '26 21:03

Andy


2 Answers

ParseException doesn't offer a reliably way of determining the cause of the exception itself. You could invoke parse twice setting lenient to true and false and checking its state in the exception block

SimpleDateFormat sdf = new SimpleDateFormat("M/dd/yyyy");
try {
    sdf.setLenient(true);
    Date date = sdf.parse("1/33/1999");
    System.out.println("DateFormat is OK");
    sdf.setLenient(false);
    date = sdf.parse("1/33/1999");

} catch (ParseException ex) {
    ex.printStackTrace();
    if (!sdf.isLenient())  {
        System.out.println("Invalid date");
    } else {
        System.out.println("Invalid date pattern");
    }
}
like image 75
Reimeus Avatar answered Mar 08 '26 10:03

Reimeus


format given is wrong.

By that if you mean that the format is invalid, then that throws IllegalArgumentException, see here.

But you should not have to check that, the pattern you supply is determined at compile time and you should be able to ensure that it is valid; the check should be required only if the pattern is not known at compile time.

like image 30
Miserable Variable Avatar answered Mar 08 '26 11:03

Miserable Variable



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!