public static int CheckDate(String strYear, String strMonth,String strDay,String strHour){
int intReturnOk = 0;
int intReturnYearError  = 1;
int intReturnMonthError = 2;
int intReturnDayError   = 3;
int intReturnHourError  = 4;
int intYear, intMonth, intDay,intHour; if (strYear.length() != 4) return intReturnYearError;
if (strMonth.length() > 2) return intReturnMonthError;
if (strDay.length()  > 2) return intReturnDayError;
if (strHour.length()  > 2) return intReturnHourError; if (!IsHalfNum(strYear))  return intReturnYearError;
if (!IsHalfNum(strMonth)) return intReturnMonthError;
if (!IsHalfNum(strDay))  return intReturnDayError;
if (!IsHalfNum(strHour))  return intReturnHourError; intYear  = Integer.valueOf (strYear).intValue ();
intMonth = Integer.valueOf (strMonth).intValue ();
intDay  = Integer.valueOf (strDay).intValue ();
intHour  = Integer.valueOf (strHour).intValue (); if (intYear == 0) return intReturnYearError;
if (intMonth < 1 || intMonth > 12) return intReturnMonthError;
if (intDay < 1 || intDay > 31) return intReturnDayError;
if (intHour < 0 || intHour > 23) return intReturnHourError; switch(intMonth){
case 4:
case 6:
case 9:
case 11:
if (intDay > 30) return intReturnDayError;
break;
case 2:
GregorianCalendar GreDate = new GregorianCalendar();
if (GreDate.isLeapYear (intYear)){
if (intDay > 29) return intReturnDayError;
}else{
if (intDay > 28) return intReturnDayError;
}
break;
}
return intReturnOk;
}
public static boolean IsHalfNum(String strin){
char c;
for (int i=0; i<strin.length ();i++){
c = strin.charAt (i);
if ( c < 0x0030 || c > 0x0039 ) return false;
}
return true;
}

解决方案 »

  1.   

    为什么要在服务器端校验那!
    一般都在客户端校验呀:
    //判断是否是合法的日期格式(yyyy-mm-dd)
    function isDate(s){
    var re = /-/gi;
    if(isNaN(Date.parse(s.replace(re,"/")))){
    return false;
    }
    return true;
    }
      

  2.   

    to:fengjingyu(海贝壳):
     谢谢,但是如何将年月日时的信息从字符串中抽取出来呢.日期的格式有好多种呢
      

  3.   

    一个处理日期的类,楼主看看吧!
    /**
     * <p>Title: Haley's Project</p>
     * <p>Description: Haley's Project</p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: ilog</p>
     * @author Haley
     * @version 1.0
     * @date 2003-09-25
     */import java.util.*;
    import java.text.*;public class formatDate {  public formatDate() {
      }  // 格式化日期为字符串 "yyyy-MM-dd hh:mm"
      public String formatDateTime(Date basicDate,String strFormat) {
        SimpleDateFormat df = new SimpleDateFormat(strFormat);
        return df.format(basicDate);
      }  // 格式化日期为字符串 "yyyy-MM-dd hh:mm"
      public String formatDateTime(String basicDate,String strFormat) {
        SimpleDateFormat df = new SimpleDateFormat(strFormat);
        Date tmpDate=null;
        try {
          tmpDate=df.parse(basicDate);
        }
        catch(Exception e) {
          // 日期型字符串格式错误
        }
        return df.format(tmpDate);
      }  // 当前日期加减n天后的日期,返回String (yyyy-mm-dd)
      public String nDaysAftertoday(int n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar rightNow = Calendar.getInstance();
        //rightNow.add(Calendar.DAY_OF_MONTH,-1);
        rightNow.add(Calendar.DAY_OF_MONTH,+n);
        return df.format(rightNow.getTime());
      }  // 当前日期加减n天后的日期,返回Date
      public Date nDaysAfterNowDate(int n) {
        Calendar rightNow = Calendar.getInstance();
        //rightNow.add(Calendar.DAY_OF_MONTH,-1);
        rightNow.add(Calendar.DAY_OF_MONTH,+n);
        return rightNow.getTime();
      }  // 给定一个日期型字符串,返回加减n天后的日期型字符串
      public String nDaysAfterOneDateString(String basicDate,int n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date tmpDate = null;
        try {
          tmpDate = df.parse(basicDate);
        }
        catch(Exception e){
          // 日期型字符串格式错误
        }
        long nDay=(tmpDate.getTime()/(24*60*60*1000)+1+n)*(24*60*60*1000);
        tmpDate.setTime(nDay);    return df.format(tmpDate);
      }  // 给定一个日期,返回加减n天后的日期,返回Date
      public Date nDaysAfterOneDate(Date basicDate,int n) {
        long nDay=(basicDate.getTime()/(24*60*60*1000)+1+n)*(24*60*60*1000);
        basicDate.setTime(nDay);    return basicDate;
      }  // 当前日期加减n个月后的日期,返回String (yyyy-mm-dd)
      public String nMonthsAftertoday(int n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar rightNow = Calendar.getInstance();
        //rightNow.add(Calendar.DAY_OF_MONTH,-1);
        rightNow.add(Calendar.MONTH,+n);
        return df.format(rightNow.getTime());
      }  // 当前日期加减n个月后的日期,返回Date
      public Date nMonthsAfterNowDate(int n) {
        Calendar rightNow = Calendar.getInstance();
        //rightNow.add(Calendar.DAY_OF_MONTH,-1);
        rightNow.add(Calendar.MONTH,+n);
        return rightNow.getTime();
      }  // 当前日期加减n个月后的日期,返回Date
      public Date nMonthsAfterOneDate(Date basicDate,int n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(basicDate);
        rightNow.add(Calendar.MONTH,+n);
        return rightNow.getTime();
      }  // 当前日期加减n个月后的日期,返回String
      public String nMonthsAfterOneDateString(Date basicDate,int n) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(basicDate);
        rightNow.add(Calendar.MONTH,+n);
        return df.format(rightNow.getTime());
      }  // 计算两个日期相隔的天数
      public int nDaysBetweenTwoDate(Date firstDate,Date secondDate) {
        int 
    nDay=(int)((secondDate.getTime()-firstDate.getTime())/(24*60*60*1000));
        return nDay;
      }  // 计算两个日期相隔的天数
      public int nDaysBetweenTwoDate(String firstString,String secondString) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date firstDate=null;
        Date secondDate=null;
        try {
          firstDate = df.parse(firstString);
          secondDate=df.parse(secondString);
        }
        catch(Exception e) {
          // 日期型字符串格式错误
        }    int 
    nDay=(int)((secondDate.getTime()-firstDate.getTime())/(24*60*60*1000));
        return nDay;
      }}
      

  4.   

    用SimpleDateFormat类就会产生我提出的问题.
    Date.parse()虽然好用,但在jdk中被Deprecated掉了.
      

  5.   

    算了,就用Date.parse()了.结贴了.
      

  6.   

    SimpleDateFormat中,格式按"yyyy-MM-dd"时,输入2003/111/12是不会报错,但是是这样转换的:按2003年开始的第111个月开始的,你注意一下输出就知道了,是2012年
    而输入2002/11/1@@,则是按2002/11/1计算的
    你可以限制用户的输入保持2位的数字