I need to parse a date from input string using date pattern "yyyy-MM-dd", and if date will come in any other format, throw an error.
This is my piece of code where I parse the date:
private void validateDate() throws MyException {
Date parsedDate;
String DATE_FORMAT = "yyyy-MM-dd";
try{
parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate());
System.out.println(parsedDate);
} catch (ParseException e) {
throw new MyException(“Error occurred while processing date:” + getMyDate());
}
}
When I have string like "2011-06-12" as input in myDate I will get output "Thu Sep 29 00:00:00 EEST 2011", which is good.
When I sent an incorrect string like “2011-0612”, I’m getting error as expected.
Problems start when I’m trying to pass a string which still has two “hyphens”, but number of digits is wrong. Example:
input string “2011-06-1211” result "Tue Sep 23 00:00:00 EEST 2014".
input string “2011-1106-12” result "Mon Feb 12 00:00:00 EET 2103".
I can't change input format of string date.
How I can avoid it?
DateTimeFormatter is a replacement for the old SimpleDateFormat that is thread-safe and provides additional functionality.
Deprecated. A class for parsing and formatting dates with a given pattern, compatible with the Java 6 API.
2.2.Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally. So SimpleDateFormat instances are not thread-safe, and we should use them carefully in concurrent environments.
The parse() Method of SimpleDateFormat class is used to parse the text from a string to produce the Date. The method parses the text starting at the index given by a start position.
Have you tried calling setLenient(false) on your SimpleDateFormat?
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
Date date = format.parse("2011-06-1211"); // Throws...
System.out.println(date);
}
}
Note that I'd also suggest setting the time zone and locale of your SimpleDateFormat. (Alternatively, use Joda Time instead...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With