java中如何判断输入的日期是否合法?

比如2008-1-1,然后我要修改它,修改后要判断它是不是****-**-**格式的,而且要日期格式的(月份不能大于12,还要考虑6月是30天,7月是31天,2月闰年29,非闰年28...这种东西), 请问这怎么弄呢?

import java.util.*;
import java.util.regex.*;
import java.text.*;

/** 这个是按照楼主的描述使用通过判断字符验证时间合法性 */
public class DateUtils2 {

//测试代码 begin
public static void main(String[] s){
//以下是测试代码
test("20099-1-1");
test("20099-100-1");
test("20099-1-100");
test("2009-1-1");
test("2009-1-31");
test("2009-2-28");
test("2009-2-29");
test("2008-2-29");
}

private static void test(String stringdate){
System.out.println("输入[" + stringdate + "]是否合法:" + validate(stringdate));
}
//测试代码 end

//==

/** 判断主方法 */
public static boolean validate(String dateString){
//使用正则表达式 测试 字符 符合 dddd-dd-dd 的格式(d表示数字)
Pattern p = Pattern.compile("\\d{4}+[-]\\d{1,2}+[-]\\d{1,2}+");
Matcher m = p.matcher(dateString);
if(!m.matches()){ return false;}

//得到年月日
String[] array = dateString.split("-");
int year = Integer.valueOf(array[0]);
int month = Integer.valueOf(array[1]);
int day = Integer.valueOf(array[2]);

if(month<1 || month>12){ return false;}
int[] monthLengths = new int[]{0, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(isLeapYear(year)){
monthLengths[2] = 29;
}else{
monthLengths[2] = 28;
}
int monthLength = monthLengths[month];
if(day<1 || day>monthLength){
return false;
}
return true;
}

/** 是否是闰年 */
private static boolean isLeapYear(int year){
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ;
}
}

copy的 刚好和你的问题一样~~~~~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-20
直接用一个JS的日历代码就可以了
没有你想象的哪么麻烦,日历代码添进来的日期都是合法的
第2个回答  2013-09-20
如果你是在jsp中要输入日期的话,还是用JS的日历代码吧,方便又实用。我在做页面的时候都是使用这样的方法的。
相似回答