you can use calendar class to check itint yy = Integer.parseInt(your_string.substring(0,4));
int mm = Integer.parseInt(your_string.substring(4,6));
int dd = Integer.parseInt(your_string.substring(6,8));
int hh = Integer.parseInt(your_string.substring(8,10));
Calendar c = new GregorianCalendar(yy,mm-1,dd,hh,0,0);
if (c.get(Calendar.YEAR) != yy || c.get(Calendar.MONTH) != mm-1 || c.get(Calendar.DAY) != dd || c.get(Calendar.HOUR) != hh) {
    return false;
}
return true;

解决方案 »

  1.   

    String date = "2005020313";
    SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHH");
    fmt.setLenient(false);
    try {
        fmt.parse(date);
    } catch (ParseException e) {
        //不符合日期格式
        e.printStackTrace();
    }
      

  2.   

    String dateString = "2005010213";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
    Date date = sdf.parse(dateString);//在此捕捉异常,如果有,则字符串格式不对
      

  3.   

    正则表达式
     function validateDate(form) {
                   var bValid = true;
                   var focusField = null;
                   var i = 0;
                   var fields = new Array();
                   oDate = new DateValidations();
                   for (x in oDate) {
                       var value = form[oDate[x][0]].value;
                       var datePattern = oDate[x][2]("datePatternStrict");
                       if ((form[oDate[x][0]].type == 'text' ||
                            form[oDate[x][0]].type == 'textarea') &&
                           (value.length > 0) &&
                           (datePattern.length > 0)) {
                         var MONTH = "MM";
                         var DAY = "dd";
                         var YEAR = "yyyy";
                         var orderMonth = datePattern.indexOf(MONTH);
                         var orderDay = datePattern.indexOf(DAY);
                         var orderYear = datePattern.indexOf(YEAR);
                         if ((orderDay < orderYear && orderDay > orderMonth)) {
                             var iDelim1 = orderMonth + MONTH.length;
                             var iDelim2 = orderDay + DAY.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderDay && iDelim2 == orderYear) {
                                dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                             } else if (iDelim1 == orderDay) {
                                dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                             } else if (iDelim2 == orderYear) {
                                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                             } else {
                                dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                             }
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                if (!isValidDate(matched[2], matched[1], matched[3])) {
                                   if (i == 0) {
                                       focusField = form[oDate[x][0]];
                                   }
                                   fields[i++] = oDate[x][1];
                                   bValid =  false;
                                }
                             } else {
                                if (i == 0) {
                                    focusField = form[oDate[x][0]];
                                }
                                fields[i++] = oDate[x][1];
                                bValid =  false;
                             }
                         } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                             var iDelim1 = orderDay + DAY.length;
                             var iDelim2 = orderMonth + MONTH.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                             } else if (iDelim1 == orderMonth) {
                                 dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                             } else if (iDelim2 == orderYear) {
                                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                             } else {
                                 dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                             }
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                 if (!isValidDate(matched[1], matched[2], matched[3])) {
                                     if (i == 0) {
                                         focusField = form[oDate[x][0]];
                                     }
                                     fields[i++] = oDate[x][1];
                                     bValid =  false;
                                  }
                             } else {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                 }
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                             }
                         } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                             var iDelim1 = orderYear + YEAR.length;
                             var iDelim2 = orderMonth + MONTH.length;
                             var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                             var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                             if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                             } else if (iDelim1 == orderMonth) {
                                 dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                             } else if (iDelim2 == orderDay) {
                                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                             } else {
                                 dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                             }
                             var matched = dateRegexp.exec(value);
                             if(matched != null) {
                                 if (!isValidDate(matched[3], matched[2], matched[1])) {
                                     if (i == 0) {
                                         focusField = form[oDate[x][0]];
                                      }
                                      fields[i++] = oDate[x][1];
                                      bValid =  false;
                                  }
                              } else {
                                  if (i == 0) {
                                      focusField = form[oDate[x][0]];
                                  }
                                  fields[i++] = oDate[x][1];
                                  bValid =  false;
                              }
                         } else {
                             if (i == 0) {
                                 focusField = form[oDate[x][0]];
                             }
                             fields[i++] = oDate[x][1];
                             bValid =  false;
                         }
                      }
                   }
                   if (fields.length > 0) {
                      focusField.focus();
                      alert(fields.join('\n'));
                   }
                   return bValid;
                }
      

  4.   

    路上的怎么把javascript也搬出来了?
      

  5.   

    SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,
    比如2005020401可以,但200502041就不行呢?
      

  6.   

    最好用捕捉异常
    import java.util.*;public class formular {   public static void main(String[] args) {
          System.out.println(isvaliedate("2004022918"));
       }   public static boolean isvaliedate(String timestr) {
          if (timestr.length() != 10)
             return false;
          int y, m, d, h, yy, mm, dd, hh;
          try {
             y = Integer.parseInt(timestr.substring(0, 4));
             m = Integer.parseInt(timestr.substring(4, 6)) - 1;
             d = Integer.parseInt(timestr.substring(6, 8));
             h = Integer.parseInt(timestr.substring(8, 10));
          } catch (NumberFormatException e) {
             return false;
          }
          Calendar dt = Calendar.getInstance();
          dt.clear();
          dt.set(y, m, d, h, 0, 0);
          yy = dt.get(Calendar.YEAR);
          mm = dt.get(Calendar.MONTH);
          dd = dt.get(Calendar.DATE);
          hh = dt.get(Calendar.HOUR);
          if (dt.get(Calendar.AM_PM) == Calendar.PM)
             hh += 12;
          if (yy != y || mm != m || dd != d || hh != h) {
             return false;
          }
          return true;
       }
    }
      

  7.   

    建议不使用SimpleDateFormat,使用Calendar,很好用
      

  8.   

    回复人: labrun(labrun) ( ) 信誉:100  2005-02-04 17:43:00  得分: 0  
     
     
       SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,
    比如2005020401可以,但200502041就不行呢?
      
     
    -----------------------
    我前面的回复中有啊,加上这么一句:
    fmt.setLenient(false);
      

  9.   

    回复人: fogs(菜鸟想飞) ( ) 信誉:100  2005-02-04 21:16:00  得分: 0  
     
     
       建议不使用SimpleDateFormat,使用Calendar,很好用
      
     
    ------------------------
    why?请问SimpleDateFormat有什么不妥么?
      

  10.   

    回复人: labrun(labrun) ( ) 信誉:100  2005-02-04 17:43:00  得分: 0  
     
     
       SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,
    比如2005020401可以,但200502041就不行呢?
      
     
    -----------------------
    最近老眼昏花,老是看错,真不好意思
    对于你的要求,setLenient()方法也不行
      

  11.   

    捕获异常是极其消耗资源的
    用捕获异常来进行判断是异常的一种错误用法,在这里正确的方法是用正则表达式或自己分析(同样不能用捕获Integer.parseInt()的方式进行,而是应该先看这个字符串是不是全是数字s.char(i)在字符'0'到'9'之间)
      

  12.   

    如果是文本框的话,可以用JFormattedTextField一开始就阻止用户输入非法的数值啊!