try {
java.sql.Date.valueOf(2006-16-25);
} catch (IllegalArgumentException e) {
logger.error("validateDate(String)", e);
return false;
} return true;
上面的代码居然返回true..
java将"2006-16-25"转日期型时转到2007年了..
大家有什么好办法?

解决方案 »

  1.   

    try {
    java.sql.Date.valueOf(“2006-16-25”);
    } catch (IllegalArgumentException e) {
    logger.error("validateDate(String)", e);
    return false;
    } return true;这样是java.sql.Date.valueOf只是判断字符串是否是yyyy-mm-dd格式
      

  2.   

    java.sql.Date.valueOf(“2006-16-25”);也是返回true的
      

  3.   

    实际上最后返回的是  new Date(2006-1900,16-1,25)
      

  4.   

    是啊...要不很郁闷啊..java的日期类怎么这样啊?
    @?@
      

  5.   

    xuyang821225(CSDN账号) ( ) 信誉:107  2006-06-30 16:03:00  得分: 0  
     
     
       实际上最后返回的是  new Date(2006-1900,16-1,25)
      
     
    你这是什么意思啊?
      

  6.   

    Calendar  最后通过这个的set方法搞定的,所以你只有问JAVA的开发人员了。要不就自己写
      

  7.   

    xuyang821225(CSDN账号) ( ) 信誉:107  2006-06-30 16:03:00  得分: 0  
     
     
       实际上最后返回的是  new Date(2006-1900,16-1,25)
      
     
    你这是什么意思啊?这个你不用去管,实际上在这边-了多少  new的时候都会加上主要是因为Calendar的set方法会自动的将你超出界限的向上进位
      

  8.   

    import java.text.DateFormat;
    import java.text.ParseException;public class DateParsing {
    public static boolean isValidDate(String dateString) {
    DateFormat format = DateFormat.getDateInstance();
    format.setLenient(false);

    try {
    format.parse(dateString);
    } catch (ParseException e) {
    return false;
    }
    return true;
    }

    public static void main(String args[]) {
    System.out.println(isValidDate("2006-12-32"));

    }
      

  9.   

    String strYear = "2006-16-25".substring(0,4);
    int intYear = Integer.parseInt(strYear);
    String strMonth = "2006-16-25".substring(5,7);
    int intMonth = Integer.parseInt(strMonth);
    String strDay = "2006-16-25".substring(8);
    int intDay = Integer.parseInt(strDay);
    Calendar checkDate = Calendar.getInstance();
    checkDate.setLenient(false);
    checkDate.set(intYear,intMonth,intDay);
    try{
        Date date = check.getTime();
    }catch(IllegalArgumentException e){
        System.out.print("ErrorMessage");
    }
      

  10.   

    /**
         * 判断输入的日期字符串是否合法
         * 日期格式为"yyyy-MM-dd"形式
         * @param s String
         * @return boolean
         */
        public boolean isDate(String s)
        {
            String[] str = s.split("-") ;
        
            try
            {
                Calendar c = Calendar.getInstance();
                c.setLenient(false);
                c.set(Integer.parseInt(str[0]),Integer.parseInt(str[1]), Integer.parseInt(str[2]));
                c.getTime();
            }
            catch (Exception e)
            {
                return false;
            }        return true;
        }但是这个方法并不能检测 02-30  04-30之类,还有待修改
      

  11.   

    steedhorse(晨星) 的方法perfect
      

  12.   

    谢谢大家。。特别是:steedhorse(晨星)