您的位置:首页 > 编程语言 > Java开发

看老外java.sql.data中data的处理

2010-11-29 23:27 225 查看
今天写了个小程序,是一个注册页面,将注册信息加入到Mysql数据库中,在注册页面中对数据没有进行校验,写完后,自己试了试,发现很好。然后让同学也来试了试,结果一运行就出错。后来才发现是data型数据转换时错了。

我用了

Data birthday=java.sql.Date.valueOf(sbirthday.trim());

这样的方式来进行数据转换,结果问题就是出现在这里。

我同学输入生日日期是输入的 1988-8-8,一旦不是按照 yyyy-mm-dd 的格式就出错。我想难道这样的日期就不能转换吗?

然后我查看了 jdk1.6的源代码:它竟然就是这样处理的:



public static Date valueOf(String s) {

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)) {

String yyyy = s.substring(0, firstDash);

String mm = s.substring(firstDash + 1, secondDash);

String dd = s.substring(secondDash + 1);



//问题就出现在这里,它会先校验切割后的日期是否年为4位,月为2位,日为2位,否则d就为null,抛出异常。

//难道老外就不会处理吗?

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) {

int maxDays = MAX_DAY;

switch (month) {

// February determine if a leap year or not

case 2:

if((year % 4 == 0 && !(year % 100 == 0)) || (year % 400 == 0)) {

maxDays = MAX_DAY-2; // leap year so 29 days in February

} else {

maxDays = MAX_DAY-3; // not a leap year so 28 days in February

}

break;

// April, June, Sept, Nov 30 day months

case 4:

case 6:

case 9:

case 11:

maxDays = MAX_DAY-1;

break;

}

if (day >= 1 && day <= maxDays) {

d = new Date(year - 1900, month - 1, day);

}

}

}

}

//如果你的日期格式不正确,那就等着抛出异常吧!!!

if (d == null) {

throw new java.lang.IllegalArgumentException();

}

return d;

}





看来,老外写代码是非常严谨的。他会把这个问题交给用户处理,然后按照你交给他的合格数据进行严格的处理。否则会出现很多格式不严谨的数据提交给jdk,那就乱了!



看源代码会发现好多问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐