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

这里只是为了满足用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);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值