java 中 可以通过setLenient(false)然后捕获IllegalArgumentException异常判断日期合法性有没有不用异常判断的方法??

解决方案 »

  1.   

    自己编程,
    可以考虑用正则判断格式,然后自己判断每一部分的值是否合法,或用Date相关类判断数值是否合法
      

  2.   

    /**
     * IS yyyy-MM-dd Date String
     * 
     * @param date
     * @return boolean
     */
    public static boolean isDate(String date) {
    boolean flag = false;
    String dateStr = (date == null) ? "" : date;
    if (dateStr.length() > 10)
    return false;
    Pattern p = Pattern
    .compile("^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$");
    Matcher m = p.matcher(date);
    if (m.matches())
    flag = true;
    return flag;
    }
      

  3.   

    唉 传入的参数时Calendar 实例
    需要判断它是否时合法的
    用正则当然也可以解决,只是那样子感觉绕的很远了
      

  4.   

    两裤衩的也是up正则表达式, 绕弯了吧...Java中输入非法日期, 比如2006-2-30, 创建的Calendar会自动往后顺延, 成为2006-3-2. 你使用Calendar.get(...)判断是否相同就可以了, 如果不同则日期肯定是非法的.
      

  5.   

    package com.rcom10002;import java.util.Calendar;public class Main {    /**
         * @param args
         */
        public static void main(String[] args) {
            System.out.println(isValidDate("2005-06-31"));
        }    /**
         * 验证格式为YYYY-MM-DD的字符串是否是有效的日期
         * 
         * @param customDate
         *            日期字符串
         * @return 有效时返回true,无效时返回false
         */
        public static boolean isValidDate(String customDate) {
            if (customDate == null) {
                return false;
            }
            if (!customDate.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
                return false;
            }
            String[] dateParts = customDate.split("-");
            int[] dateIntParts = { Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]),
                    Integer.parseInt(dateParts[2]) };
            int[] dateParsedParts = new int[3];
            Calendar calendar = Calendar.getInstance();
            calendar.clear();
            calendar.set(dateIntParts[0], dateIntParts[1] - 1, dateIntParts[2]);
            dateParsedParts[0] = calendar.get(Calendar.YEAR);
            dateParsedParts[1] = calendar.get(Calendar.MONTH) + 1;
            dateParsedParts[2] = calendar.get(Calendar.DATE);
            return (dateParsedParts[0] == dateIntParts[0]) && (dateParsedParts[1] == dateIntParts[1])
                    && (dateParsedParts[2] == dateIntParts[2]);
        }
    }