编写一个方法,将格式为“yyyy/mm/dd”的字符串转换为日期类型,如果日期数据非法,则抛出异常。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Dates {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next(); //输入日期 格式为2020/3/21
String[] arr = s.split("/"); // 以/为分隔符,提取年月日
int y = Integer.parseInt(arr[0]); //转换为int型
int m = Integer.parseInt(arr[1]);
int d = Integer.parseInt(arr[2]);
date2 rq = new date2(y, m, d);
if (rq.panduan(y, m, d))
System.out.println(rq.print());
else
throw new InputMismatchException("格式错误");
}
}
class date2 {
int year = 2000; //初始化日期
int month = 1;
int day = 1;
int[] montha = new int[] {1, 3, 5, 7, 8, 10, 12}; //大月
int k = 0; //判断大小月
public String print() {
String s = year + "/" + month + "/" + day;
return s;
}
//判断日期转换前后是否一致
public boolean panduan(int year, int month, int day) {
if (this.year == year && this.month == month && this.day == day)
return true;
else
return false;
}
//将日期转为合法日期
public date2(int year, int month, int day) {
if(year > 0 && year < 3000) { //年份在1-2999
this.year = year;
if(month > 0 && month < 13) //月份在1-12
this.month = month;
for(int i = 0; i < montha.length; i++) //判断是否为大月
if(month == montha[i]) {
k = 1;
break;
}
if(k == 1 && day > 0 && day < 32) //大月
this.day = day;
else if(k == 0 && month != 2 && day > 0 && day < 31) //小月
this.day = day;
else if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
if(day > 0 && day < 30) //闰年2月
this.day = day;
}
else if(day > 0 && day < 29) //平年2月
this.day = day;
}
}
}