题目:
/*
* Date 存储 年-月-日 信息
* 原则: 一切从用户角度出发
* 功能:
* 1) 初始化
* i. 传入年/月/日
* 2. 不传,今天 回头
* 2) 多少天之后的年/月/日
* 3) 多少天之前的年/月/日
*/
主要思路:
1、在类里面的构造方法中写入年月日的输入的格式及条件
2、月份的天数是一个不确定的值,4,6,9,11月是30天,1,3,5,7,8,10,12月是31天,2月在闰年是29天,所以写了一个方法,根据输入的月份确定天数。
3、计算之后的时间,根据输入月份的天数和需要改变的天数对年和月进行修改,计算之前的时间原理一样,不过这块容易出问题,需要细心一点。
4、最后就是输出,toString()
/*
* Date 存储 年-月-日 信息
* 原则: 一切从用户角度出发
* 功能:
* 1) 初始化
* i. 传入年/月/日
* 2. 不传,今天 回头
* 2) 多少天之后的年/月/日
* 3) 多少天之前的年/月/日
*/
class Date{
public int year;
public int month;
public int day;
public Date(int year,int month,int day){
//年[1949,2049]
if(year<1949||year>2049){
System.err.println("你输入的年份不在范围内!");
return;
}
//月[1,12]
if(month<1||month>12){
System.err.println("你输入的月份不在范围内!");
return;
}
//天
if(day<1||day>cal(year,month)){
System.err.println("你输入的天数不在范围内!");
return;
}
this.year=year;
this.month=month;
this.day=day;
}
public int cal(int year,int month){
//2月
if(month==2){
if(year%4==0&&year%100!=0){
return 29;
}
if(year%400==0){
return 29;
}
}
//4,6,9,11月
int[] thirty={4,6,9,11} ;
for(int i=0;i<thirty.length;i++){
if(month==thirty[i]){
return 30;
}
}
//1,3,5,7,8,10,12月
int[] thirtyone={1,3,5,7,8,10,12};
for(int i=0;i<thirtyone.length;i++){
if(month==thirtyone[i]){
return 31;
}
}
return 28;
}
//计算之后的时间
public Date after(int day1){
day+=day1;
while(day>cal(year,month)){
day-=cal(year,month);
month+=1;
if(month>12){
month=1;
year+=1;
}
}
return this;
}
//计算之前的时间
public Date before(int day2){
if(day2<day){
day-=day2;
return this;
}
while(day2>day){
month-=1;
day=cal(year,month)-(day2-day);
if(month<1){
month=12;
year-=1;
}
}
return this;
}
public String toString(){
return String.format("%d-%d-%d",year,month,day);
}
}
public class TestDate{
public static void main(String[] args){
Date now1=new Date(2019,7,20);
Date now2=new Date(2000,7,20);
Date a=now1.after(80);
Date b=now2.before(5);
System.out.println(a.toString());
System.out.println(b.toString());
}
}