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;
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;
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHH");
fmt.setLenient(false);
try {
fmt.parse(date);
} catch (ParseException e) {
//不符合日期格式
e.printStackTrace();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
Date date = sdf.parse(dateString);//在此捕捉异常,如果有,则字符串格式不对
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;
}
比如2005020401可以,但200502041就不行呢?
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;
}
}
SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,
比如2005020401可以,但200502041就不行呢?
-----------------------
我前面的回复中有啊,加上这么一句:
fmt.setLenient(false);
建议不使用SimpleDateFormat,使用Calendar,很好用
------------------------
why?请问SimpleDateFormat有什么不妥么?
SimpleDateFormat的parse方法最方便,但是如何使yyyyMMddHH这里面的HH必须是2位数,
比如2005020401可以,但200502041就不行呢?
-----------------------
最近老眼昏花,老是看错,真不好意思
对于你的要求,setLenient()方法也不行
用捕获异常来进行判断是异常的一种错误用法,在这里正确的方法是用正则表达式或自己分析(同样不能用捕获Integer.parseInt()的方式进行,而是应该先看这个字符串是不是全是数字s.char(i)在字符'0'到'9'之间)