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;
}
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;
}
一般都在客户端校验呀:
//判断是否是合法的日期格式(yyyy-mm-dd)
function isDate(s){
var re = /-/gi;
if(isNaN(Date.parse(s.replace(re,"/")))){
return false;
}
return true;
}
谢谢,但是如何将年月日时的信息从字符串中抽取出来呢.日期的格式有好多种呢
/**
* <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;
}}
Date.parse()虽然好用,但在jdk中被Deprecated掉了.
而输入2002/11/1@@,则是按2002/11/1计算的
你可以限制用户的输入保持2位的数字