判断日期的合法性

/** 
 * @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 "日期不合法!";
	}
}

 

转载于:https://my.oschina.net/bysu/blog/1552848

1.编写类MyDate.java 2.该类有如下构造方法 2.1 无参数构造方法public MyDate(),以当前的系统时间构造MyDate对象 2.2 public MyDate(int year, int month, int day), 以指定的年月日构造MyDate对象 3.该类有如下属性 3.1 private int year ;//年 3.2 private int month; //月 3.3 private int day; //日 4.该类有如下方法 4.1 public String after(int day); //返回当前对象代表的日期之后day天的日期,比如当前对象是2008-8-8,调用after(5)以后,应该返回2008-8-13,格式可自定义 4.2 public String before(int day); //返回当前对象代表的日期之前day天的日期,比如当前对象是2008-8-8,调用before(5)以后,应该返回2008-8-3,格式可自定义 4.3 public void setYear(int year); //设置年为指定值year 4.4 public void setMonth(int month); //设置月为指定值month 4.5 public void setDay(int day); //设置日为指定值day 4.6 public int getYear(); //返回当前对象的年 4.7 public int getMonth(); //返回当前对象的月 4.8 public int getDay(); //返回当前对象的日 4.9 public void set (int year, int month, int day); //设置年、月、日为指定的值year、month、day 4.10 public String toString();//以字符串形式返回当前对象的年月日,例如2008年08月08日,格式可自定义 4.11 public boolean equals(MyDate mydate);//当前对象与另一个对象比较,如果两个对象的年月日均相等,则返回true,反之返回false 5.编写TestMyDate.java,在main方法中对MyDate类的各个方法进行测试 6.按照编程规范为MyDate.java编写规范的代码 7.按照java doc API的要求,对代码编写规范的注释,然后利用javadoc.exe命令生成MyDate.java的API doc 8.撰写上机报告
要在使用`string`函数的情况下,你可以使用`scanf`函数读取用户输入的日期,并使用结构体和自定义函数来验证日期的有效性和进行比较。这里是一个简单的示例,假设我们只考虑年月日形式的日期: ```c #include <stdio.h> #include <stdbool.h> // 定义日期结构 typedef struct { int year; int month; int day; } Date; // 判断日期合法性 bool is_valid_date(Date date) { return (date.year >= 1900 && date.year <= 9999 && date.month >= 1 && date.month <= 12 && date.day >= 1 && date.day <= 31); } // 比较日期 Date earlier_date(Date date1, Date date2) { if (date1.year < date2.year || (date1.year == date2.year && date1.month < date2.month) || (date1.year == date2.year && date1.month == date2.month && date1.day < date2.day)) { return date1; } else { return date2; } } int main() { Date date1, date2; // 输入并检查日期1的合法性 printf("Enter the first date (YYYY-MM-DD): "); scanf("%d-%d-%d", &date1.year, &date1.month, &date1.day); if (!is_valid_date(date1)) { printf("Invalid date 1.\n"); return 1; } // 输入并检查日期2的合法性 printf("Enter the second date (YYYY-MM-DD): "); scanf("%d-%d-%d", &date2.year, &date2.month, &date2.day); if (!is_valid_date(date2)) { printf("Invalid date 2.\n"); return 1; } // 比较日期并输出结果 Date result = earlier_date(date1, date2); printf("%s is earlier than %s.\n", result.year == date1.year ? "" : "The", result.year == date2.year ? "" : "The"); return 0; } ``` 在这个例子中,我们首先读取用户输入的日期,然后通过`is_valid_date`函数检查输入是否有效。如果输入无效,会提示用户输入错误。如果两个日期都是有效的,我们就通过`earlier_date`函数确定哪一个是更早的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值