判断日期合法性

这边写一个判断一个日期的合法性,比如是没有2008-02-31,aaaa-03-89等都不合法的,这个Datetil在java中可以解决这样的一个问题,如果还有缺陷请相告,感谢!

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

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

	private static void test(String stringdate){
		System.out.println("输入[" + stringdate + "]是否合法:" + validate(stringdate));
	}
	
	/** 判断主方法 */	
	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) ;
	}
}


主函数这边直接这样调用就可以测试日期的合法性:

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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值