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,26 +103,45 @@ public class Date extends java.util.Date {
|
|||||||
* JDBC date escape format (yyyy-mm-dd)
|
* JDBC date escape format (yyyy-mm-dd)
|
||||||
*/
|
*/
|
||||||
public static Date valueOf(String s) {
|
public static Date valueOf(String s) {
|
||||||
int year;
|
final int YEAR_LENGTH = 4;
|
||||||
int month;
|
final int MONTH_LENGTH = 2;
|
||||||
int day;
|
final int DAY_LENGTH = 2;
|
||||||
|
final int MAX_MONTH = 12;
|
||||||
|
final int MAX_DAY = 31;
|
||||||
int firstDash;
|
int firstDash;
|
||||||
int secondDash;
|
int secondDash;
|
||||||
|
Date d = null;
|
||||||
|
|
||||||
if (s == null) throw new java.lang.IllegalArgumentException();
|
if (s == null) {
|
||||||
|
|
||||||
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 {
|
|
||||||
throw new java.lang.IllegalArgumentException();
|
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.
|
* Formats a date in the date escape format yyyy-mm-dd.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user