JAVA 判断输入日期是否合法,求某日期n天后的日期,两日期之间相距的天数

来源:互联网 发布:淘宝联盟代购推广 编辑:程序博客网 时间:2024/05/29 15:19

这里只是为了满足用java语言来完成这个程序,并不能体现java的优势所在,希望能给你们提供一点点的帮助,其实思路还是不错的。


毕竟太渣,不过是换个语言的形式罢了.....


package nicai;import java.util.Scanner;public class Main {static int[] MonthDay={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};   ///定义一个常规每月天数的数组;public static boolean RUN(int year){   ///定义一个判断闰年的方法if(year%400==0 || (year%4==0 && year%100!=0))return true;return false;}public static void main(String[] args) {Scanner cin = new Scanner(System.in);int year, month, day, n, y1, m1, d1;///判断输入的日期是否合法;System.out.println("亲输入三个整数,分别代表年,月,日:");year = cin.nextInt();month = cin.nextInt();day = cin.nextInt();boolean flag = true;if(month<=0 || month>=13){flag=false;}if(month==1 || month==3 || month ==5 || month==7 || month==8 || month==10 || month ==12){if(day<=0 || day>=32){flag=false;}}else if(month==2){if(RUN(year)){     if(day<=0 || day>=30)     flag=false;}else{if(day<=0 || day>=29)flag=false;}}else{if(day<=0 || day>=31){flag=false;}}if(flag==false){System.out.println("输入日期值不合法!");}else{System.out.println("输入日期值合法!");}System.out.println("亲输入三个整数,分别代表起始日期的年,月,日:");y1 = cin.nextInt();m1 = cin.nextInt();d1 = cin.nextInt();System.out.println("亲输入相隔的天数n:");n =cin.nextInt();System.out.println("n天后的日期是:");GETday(y1,m1,d1,n);///两日期之间相距的天数System.out.println("请输入 起始日期y1,m1,d1:");y1 = cin.nextInt();m1 = cin.nextInt();d1 = cin.nextInt();int  y2, m2, d2;System.out.println("请输入 结束日期y2,m2,d2:");y2 = cin.nextInt();m2 = cin.nextInt();d2 = cin.nextInt();System.out.println("两日期相差天数为:");int[] yearday = new int[110000];yearday[0]=0;    for(int i=1; i<=100000; i++)    yearday[i]=yearday[i-1]+(RUN(i)==true ? 366 : 365);    int tab[][] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; int leap; int sum=0; if(y1==y2)     {            if(RUN(y1))            leap=1;            else            leap=0;            for(int i=m1+1; i<m2; i++)                sum+=tab[leap][i];            if(m1<m2)            {                sum+=tab[leap][m1]-d1;                sum+=d2;            }            else                sum+=d2-d1;           System.out.println(sum);        }        else        {          if(RUN(y1))                 leap=1;            else            leap=0;            for(int i=m1+1; i<=12; i++)                sum+=tab[leap][i];            sum+=tab[leap][m1]-d1;            if(RUN(y2))                 leap=1;            else            leap=0;                        for(int i=1; i<m2; i++)                sum+=tab[leap][i];            sum+=d2;            sum+=yearday[y2-1]-yearday[y1];            System.out.println(sum);        }    }///求某日期n天后的日期private static void GETday(int y1, int m1, int d1, int n) {int y2, m2, d2; y2=y1;m2=m1;d2=d1;int D=365;if(RUN(y2)){D=366;}while(true){if(n/D<=0)break;n=n-D;y2++;if(RUN(y2))D=366;}if(RUN(y2)){MonthDay[2]=29;}if((n+d2) <= MonthDay[m2]){d2 = n+d2;}else{d2 = n + d2 - MonthDay[m2];m2++;if(m2>=12){y2++;m2 = m2%12;}}System.out.println("相隔n天后的日期是:");System.out.println(y2+"-"+m2+"-"+d2);}}


0 0