6898593: java.sql.Date.valueOf no exception if date given is not in the JDBC date escape syntax
Reviewed-by: minqi
This commit is contained in:
parent
438ccadcce
commit
1716bf859b
@ -103,27 +103,46 @@ public class Date extends java.util.Date {
|
||||
* JDBC date escape format (yyyy-mm-dd)
|
||||
*/
|
||||
public static Date valueOf(String s) {
|
||||
int year;
|
||||
int month;
|
||||
int day;
|
||||
final int YEAR_LENGTH = 4;
|
||||
final int MONTH_LENGTH = 2;
|
||||
final int DAY_LENGTH = 2;
|
||||
final int MAX_MONTH = 12;
|
||||
final int MAX_DAY = 31;
|
||||
int firstDash;
|
||||
int secondDash;
|
||||
Date d = null;
|
||||
|
||||
if (s == null) throw new java.lang.IllegalArgumentException();
|
||||
|
||||
firstDash = s.indexOf('-');
|
||||
secondDash = s.indexOf('-', firstDash+1);
|
||||
if ((firstDash > 0) & (secondDash > 0) & (secondDash < s.length()-1)) {
|
||||
year = Integer.parseInt(s.substring(0, firstDash)) - 1900;
|
||||
month = Integer.parseInt(s.substring(firstDash+1, secondDash)) - 1;
|
||||
day = Integer.parseInt(s.substring(secondDash+1));
|
||||
} else {
|
||||
if (s == null) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
}
|
||||
|
||||
return new Date(year, month, day);
|
||||
firstDash = s.indexOf('-');
|
||||
secondDash = s.indexOf('-', firstDash + 1);
|
||||
|
||||
if ((firstDash > 0) && (secondDash > 0) && (secondDash < s.length() - 1)) {
|
||||
String yyyy = s.substring(0, firstDash);
|
||||
String mm = s.substring(firstDash + 1, secondDash);
|
||||
String dd = s.substring(secondDash + 1);
|
||||
if (yyyy.length() == YEAR_LENGTH && mm.length() == MONTH_LENGTH &&
|
||||
dd.length() == DAY_LENGTH) {
|
||||
int year = Integer.parseInt(yyyy);
|
||||
int month = Integer.parseInt(mm);
|
||||
int day = Integer.parseInt(dd);
|
||||
|
||||
if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) {
|
||||
d = new Date(year - 1900, month - 1, day);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (d == null) {
|
||||
throw new java.lang.IllegalArgumentException();
|
||||
}
|
||||
|
||||
return d;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Formats a date in the date escape format yyyy-mm-dd.
|
||||
* <P>
|
||||
|
Loading…
x
Reference in New Issue
Block a user