如"P20010101ts"这种就不是日期,"20050101"说是日期.这个如何判断?

解决方案 »

  1.   

    可以用structs的validate验证框架,如果没用也可以参考他生成的javascript脚本
      

  2.   

    /*$RCSfile: validateDate.js,v $ $Revision: 1.10 $ $Date: 2004/03/28 16:53:21 $ */
        /**
        * Check to see if fields are a valid date.
        * Fields are not checked if they are disabled.
        * <p>
        * @param form The form validation is taking place on.
        */
        function validateDate(form) {
           var bValid = true;
           var focusField = null;
           var i = 0;
           var fields = new Array();
           var formName = form.getAttributeNode("name");        oDate = eval('new ' + formName.value + '_DateValidations()');       for (x in oDate) {
               var field = form[oDate[x][0]];
       if(field==null) continue;
               var value = field.value;
               var datePattern = oDate[x][2]("datePatternStrict");
               // try loose pattern
               if (datePattern == null)
                   datePattern = oDate[x][2]("datePattern");
               if ((field.type == 'hidden' ||
                    field.type == 'text' ||
                    field.type == 'textarea') &&
                   (value.length > 0) && (datePattern.length > 0) &&
                    field.disabled == false) {
                     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 = field;
                               }
                               fields[i++] = oDate[x][1];
                               bValid =  false;
                            }
                         } else {
                            if (i == 0) {
                                focusField = field;
                            }
                            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 = field;
                                 }
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                              }
                         } else {
                             if (i == 0) {
                                 focusField = field;
                             }
                             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 = field;
                                 }
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                             }
                         } else {
                              if (i == 0) {
                                  focusField = field;
                              }
                              fields[i++] = oDate[x][1];
                              bValid =  false;
                         }
                     } else {
                         if (i == 0) {
                             focusField = field;
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                     }
              }
           }
           if (fields.length > 0) {
              focusField.focus();
              alert(fields.join('\n'));
           }
           return bValid;
        }
        
        function isValidDate(day, month, year) {
        if (month < 1 || month > 12) {
                return false;
            }
            if (day < 1 || day > 31) {
                return false;
            }
            if ((month == 4 || month == 6 || month == 9 || month == 11) &&
                (day == 31)) {
                return false;
            }
            if (month == 2) {
                var leap = (year % 4 == 0 &&
                   (year % 100 != 0 || year % 400 == 0));
                if (day>29 || (day == 29 && !leap)) {
                    return false;
                }
            }
            return true;
        }这是从我的页面考过来的,还是第一次看呢,写的挺全面的。
      

  3.   

    tcl_wj(美女王&提踢题) 给的恐怕不是在Java中的实现吧,如果我没看错的话,应该是在VB中的实现,不过楼主也可以参考一下其思想。
      

  4.   

    如果不要求太精确,用正则表达式来解决楼主的问题最合适不过了。
    不管是jsp中的java代码,还是jsp中的javascript代码,都支持正则表达式。按楼主的意思,楼主要求区分出8个数字组成的字符串,判断它是不是能代表一个合法的日期。
    日期分成年月日:yyyyMMdd,
    yyyy可以放宽一点,0000--9999,主要是MM,应该是01--12的,dd还是比较复杂的,与yyyy和MM有关,可能是01--28或者01--29,或者01--30,或者01--31。
    要求精确的话,恐怕不好写正则表达式。如果要求很精确,那么有一个偷懒的方法,也是绝对简单,就是用java的SimpleDateFormat,先按 yyyyMMdd 解析成 java.util.Date 然后再用 SimpleDateFormat 按 yyyyMMdd 格式化它(那个Date对象),看看得到的字符串与输入的是否一样?一样就对了,不一样就错了,呵呵!
      

  5.   

    如获得完整的时间格式
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
    随便介绍几个其它函数的用法:
    本月的天数
    SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
    今年的天数
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
    下个星期一的日期
    SELECT Next_day(SYSDATE,'monday') FROM dual
      

  6.   

    回复人: peacedog() ( ) 信誉:100  2005-12-8 12:02:59  得分: 0  
     
        tcl_wj(美女王&提踢题) 给的恐怕不是在Java中的实现吧,如果我没看错的话,应该是在VB中的实现,不过楼主也可以参考一下其思想。    人家不是说了么,javascript啊.程序得注释里也有.