1.设计如下几个类:DateUtil、Year、Month、Day,其中年、月、日的取值范围依然为:year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 设计类图如下:
2.应用程序共测试三个功能:
求下n天
求前n天
求两个日期相差的天数
3.输入格式:
有三种输入方式(以输入的第一个数字划分[1,3]):
1 year month day n //测试输入日期的下n天
2 year month day n //测试输入日期的前n天
3 year1 month1 day1 year2 month2 day2 //测试两个日期之间相差的天数
输出格式:
当输入有误时,输出格式如下: Wrong Format
当第一个数字为1且输入均有效,输出格式如下:
year1-month1-day1 next n days is:year2-month2-day2
当第一个数字为2且输入均有效,输出格式如下:
year1-month1-day1 previous n days is:year2-month2-day2
当第一个数字为3且输入均有效,输出格式如下:
The days between year1-month1-day1 and year2-month2-day2 are:值
输入样例1:
在这里给出一组输入。例如:
3 2014 2 14 2020 6 14
输出样例1:
在这里给出相应的输出。例如:
The days between 2014-2-14 and 2020-6-14 are:2312
输入样例2:
在这里给出一组输入。例如:
2 1834 2 17 7821
输出样例2:
在这里给出相应的输出。例如:
1834-2-17 previous 7821 days is:1812-9-19
输入样例3:
在这里给出一组输入。例如:
1 1999 3 28 6543
输出样例3:
在这里给出相应的输出。例如:
1999-3-28 next 6543 days is:2017-2-24
输入样例4:
在这里给出一组输入。例如:
0 2000 5 12 30
输出样例4:
在这里给出相应的输出。例如:
Wrong Format
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner on=new Scanner(System.in);
int xuanze=on.nextInt();
switch(xuanze)
{
case(1):{
Year nian1=new Year(on.nextInt());
Month yue1=new Month(on.nextInt());
Day ri1=new Day(on.nextInt());
int nii=on.nextInt();
Date zzz=new Date(nian1,yue1,ri1);
if(zzz.jianyanhefaxing()==false)
System.out.println("Wrong Format");
else {
System.out.printf("%d-%d-%d next %d days is:",nian1.getValue(),yue1.getValue(),ri1.getValue(),nii);
zzz.qiuqiantian(nii);
}
break;
}
case(2):{
Year nian2=new Year(on.nextInt());
Month yue2=new Month(on.nextInt());
Day ri2=new Day(on.nextInt());
int nii2=on.nextInt();
Date zzz2=new Date(nian2,yue2,ri2);
if(zzz2.jianyanhefaxing()==false)
System.out.println("Wrong Format");
else {
System.out.printf("%d-%d-%d previous %d days is:",nian2.getValue(),yue2.getValue(),ri2.getValue(),nii2);
zzz2.qiuxiantian(nii2);
}
break;
}
case(3):{
Year nian3=new Year(on.nextInt());
Month yue3=new Month(on.nextInt());
Day ri3=new Day(on.nextInt());
Year nian4=new Year(on.nextInt());
Month yue4=new Month(on.nextInt());
Day ri4=new Day(on.nextInt());
Date zz3=new Date(nian3,yue3,ri3);
Date zz4=new Date(nian4,yue4,ri4);
if((zz3.jianyanhefaxing()==false)||(zz4.jianyanhefaxing()==false))
{
System.out.println("Wrong Format"); System.exit(0);
}//对两次输入的年月日都做合法性检验
else
zz3.getDaySub(nian3.getValue(),yue3.getValue(),ri3.getValue(),nian4.getValue(),yue4.getValue(),ri4.getValue());
break;
}
default:{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
}
class Date{
private Year year;
private Month month;
private Day day;
private int an[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
public Date() {
}
public Date(Year year, Month month, Day day) {
this.year = year;
this.month = month;
this.day = day;
}
public Year getYear() {
return year;
}
public void setYear(Year year) {
this.year = year;
}
public Month getMonth() {
return month;
}
public void setMonth(Month month) {
this.month = month;
}
public Day getDay() {
return day;
}
public void setDay(Day day) {
this.day = day;
}
void setDayMin(){
day.setValue(1);
}
void setDayMax(){
if(year.isrunnian()==true) {
if (month.getValue() == 1 || month.getValue() == 3 || month.getValue() == 5 || month.getValue() == 7 || month.getValue() == 8 || month.getValue() == 10 || month.getValue() == 12)
day.setValue(31);
else if (month.getValue() == 4 || month.getValue() == 6 || month.getValue() == 9 || month.getValue() == 11)
day.setValue(30);
else
day.setValue(29);
}
else
{
if (month.getValue() == 1 || month.getValue() == 3 || month.getValue() == 5 || month.getValue() == 7 || month.getValue() == 8 || month.getValue() == 10 || month.getValue() == 12)
day.setValue(31);
else if (month.getValue() == 4 || month.getValue() == 6 || month.getValue() == 9 || month.getValue() == 11)
day.setValue(30);
else
day.setValue(28);
}
}
boolean jianyanhefaxing() {
boolean p=false;
if(year.getValue()<1820||year.getValue()>2020)
{
return false;
}
if(month.getValue()<1||month.getValue()>12)
{
return false;
}
else if(month.getValue()==1||month.getValue()==3||month.getValue()==5||month.getValue()==7||month.getValue()==8||month.getValue()==10||month.getValue()==12) {
if (day.getValue() <= 31) {
p = true;
} else {
p = false;
}
}
else if(month.getValue()==2) {
if(year.getValue()%400==0||(year.getValue()%4==0&&year.getValue()%100!=0)) {
if(day.getValue()<=29) {
p=true;
}
else {
p=false;
}
}
else {
if(day.getValue()<=28){
p=true;
}
else {
p=false;
}
}
}
else {
if(day.getValue()<=30){
p=true;
}
else {
p=false;
}
}
return p;
}
void qiuqiantian(int n){
int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
day.setValue(day.getValue()+n);
if(isLeapYear(year.getValue()))
a[2]=29;
else
a[2]=28;
while (day.getValue()>a[month.getValue()]) {
day.setValue(day.getValue()-a[month.getValue()]);
month.setValue(month.getValue()+1);
if (month.getValue()==13)
{
month.setValue(month.getValue()-12);
year.setValue(year.getValue()+1);
}
if(isLeapYear(year.getValue()))
a[2]=29;
else
a[2]=28;
}
System.out.printf("%d-%d-%d",year.getValue(),month.getValue(),day.getValue());
}
void qiuxiantian(int n){
int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
day.setValue(day.getValue()-n);
if(isLeapYear( year.getValue()))
a[2]=29;
else
a[2]=28;
while (day.getValue()<=0)
{
month.setValue(month.getValue()-1);
if (month.getValue()==0){
month.setValue(month.getValue()+12);
year.setValue(year.getValue()-1);
}
day.setValue(day.getValue()+a[month.getValue()]);
if(isLeapYear( year.getValue()))
a[2]=29;
else
a[2]=28;
}
System.out.printf("%d-%d-%d", year.getValue(), month.getValue(),day.getValue());
}
void getDaySub(int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {
int days=0;
int dayss=0;
int i ;
int []aa = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
for(i=1;i<startYear;i++){
if(i%4==0&&i%100!=0||i%400==0) {
days+=366;}
else
days+=365;
}
if((startYear % 4 == 0 && startYear% 100 !=0 )||startYear % 400 == 0)
aa[2]=29;
for(i = 1;i<startMonth;i++){
days+=aa[i];}
days+=startDay;
for(i=1;i<endYear;i++){
if(i%4==0&&i%100!=0||i%400==0) {
dayss+=366;}
else
dayss+=365;
}
if((endYear % 4 == 0 && endYear% 100 !=0 )||endYear % 400 == 0)
aa[2]=29;
for(i = 1;i<endMonth;i++){
dayss+=aa[i];}
dayss+=endDay;
System.out.printf("The days between %d-%d-%d and %d-%d-%d are:%d",startYear,startMonth,startDay,endYear,endMonth,endDay,Math.abs(days-dayss));
}
public boolean isLeapYear(int year) {
return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ? true : false;
}
}
class Year{
private int value;
public Year() {
}
public Year(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
boolean isrunnian(){
if(value%400==0||(value%4==0&&value%100!=0))
return true;
else return false;
}
boolean yearhefa(){
if(value>=1820&&value<=2020)
return true;
else return false;
}
void nianzengjia1(){
value+=1;
}
void nianjianshao1(){
value-=1;
}
}
class Month{
private int value;
public Month() {
}
public Month(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
void resetMin(){
value=1;
}
void resetMax(){
value=12;
}
boolean jiancehefayue(){
if(value>=1&&value<=12)
return true;
else return false;
}
void yuezengjia1(){
value+=1;
}
void yuejianshao1(){
value-=1;
}
}
class Day{
private int value;
public Day() {
}
public Day(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
void dayzengjia1(){
value+=1;
}
void dayjianshao1(){
value-=1;
}
}