判断日期的合法性

/** 
 * @author 苏宝伢 E-mail:by.su@qq.com 
 * @version 创建时间: 2017年10月18日
 */
public class IsDate {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(isDate("2000.02.1"));//如果日期是以\线分隔,需以\\隔开

	}
	
	//优化后的
	public static String isDate(String date){
			String convertDate = date.replaceAll("\\p{P}", "-");//把日期中的分隔号替换为-
			String[] dataSubs = convertDate.split("-");    //以-号为标志,分隔年月日
			int year = Integer.valueOf(dataSubs[0]);
			int month = Integer.valueOf(dataSubs[1]);
			int day = Integer.valueOf(dataSubs[2]);
			///计算闰年的2月份/
			if(dataSubs[0].endsWith("00")){         //如果年份为100的整数
				if(year % 400 == 0){    //能被400整除,即闰年
					//月份
					if(month == 2){ //2月份有29号
						if(day>0 && day<30){
							return "日期合法!";
						}
					}
				}
			}else{
				if(year % 4 == 0){  //能被4整除,即闰年
					//月份
					if(month == 2){ //2月份有29号
						if(day>0 && day<30){
							return "日期合法!";
						}
					}
				}
			}
			/计算平年的各月份
			if(month == 2){ //2月份无29号
				if(day>0 && day<29){
					return "日期合法!";
				}
			}else if(month ==4|| month ==6 || month ==9|| month ==11){          //4,6,9,11月份
				if(day>0 && day<31){
					return "日期合法!";
				}
			}else{                         //剩余的月份
				if(day>0 && day<32){
					return "日期合法!";
				}
			}
			return "日期不合法!";
		}

	
	
//优化前的
	
	public static String isDate_before(String date){
	//	String convertDate = date.replaceAll("-", "[\\.|\\\\]");//把日期中的分隔号替换为-
		String[] dataSubs = date.split("-");    //以-号为标志,分隔年月日
		int year = Integer.valueOf(dataSubs[0]);
		int month = Integer.valueOf(dataSubs[1]);
		int day = Integer.valueOf(dataSubs[2]);
		
		if(dataSubs[0].endsWith("00")){         //如果年份为100的整数
			if(year % 400 == 0){    //能被400整除,即闰年
				//月份
				if(month == 2){ //2月份有29号
					if(day>0 && day<30){
						return "日期合法!";
					}
				}
				else if(month ==4|| month ==6 || month ==9|| month ==11){          //4,6,9,11月份
					if(day>0 && day<31){
						return "日期合法!";
					}
				}else{                         //剩余的月份
					if(day>0 && day<32){
						return "日期合法!";
					}
				}
			}else{
				//月份
				if(month == 2){ //2月份有29号
					if(day>0 && day<28){
						return "日期合法!";
					}
				}
				else if(month ==4|| month ==6 || month ==9|| month ==11){          //4,6,9,11月份
					if(day>0 && day<31){
						return "日期合法!";
					}
				}else{                         //剩余的月份
					if(day>0 && day<32){
						return "日期合法!";
					}
				}
			}
		}else{                                  //年份不是100的整数
			if(year % 4 == 0){  //能被4整除,即闰年
				//月份
				if(month == 2){ //2月份有29号
					if(day>0 && day<30){
						return "日期合法!";
					}
				}
				else if(month ==4|| month ==6 || month ==9|| month ==11){          //4,6,9,11月份
					if(day>0 && day<31){
						return "日期合法!";
					}
				}else{                         //剩余的月份
					if(day>0 && day<32){
						return "日期合法!";
					}
				}
			}else{
				//月份
				if(month == 2){ //2月份有29号
					if(day>0 && day<28){
						return "日期合法!";
					}
				}
				else if(month ==4|| month ==6 || month ==9|| month ==11){          //4,6,9,11月份
					if(day>0 && day<31){
						return "日期合法!";
					}
				}else{                         //剩余的月份
					if(day>0 && day<32){
						return "日期合法!";
					}
				}
				
			}
		}
		return "日期不合法!";
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值