已知年月日如何去计算星期

题目要求:输出特定日期是星期几
     以键盘录入的形式提供3个整数,按顺序分别表示为年、月、日。如果只输入一个
    整数则表示年,需要判断该年是否是闰年;如果输入两个整数,则表示年和月,需要
    输出该年中该月的天数;如果输入3个整数,表示为年、月、日,需要输出这一天是
    星期几。

首先先整理一下解题思路
1)进行字符串输入的时候,利用String类中的split()方法,利用“,”进行分割,所以在年月日中间要用逗号隔开。然后再通过Integer.valueOf()方法,将纯数字字符串转换成整数。
2)首先先判断年份是平年还是闰年,再去判断月份,最后判断日,算出这一天是星期几。



import java.util.Scanner;

public class day {
	public static void main(String[] args){
		//a[]数组中存放的是闰年月份天数,数组的下标直接对应月份
		int [] a ={0,31,29,31,30,31,30,31,31,30,31,30,31};
		//b[]数组中存放的是平年月份天数,数组的下标直接对应月份
		int [] b ={0,31,28,31,30,31,30,31,31,30,31,30,31};
		int week =0;//定义计算周几的变量
		System.out.println("请用以下形式输入整数:");
		System.out.println("若只计算平年或闰年,则输入:'年'形式");
		System.out.println("若只计算某年的某月有多少天,则输入:'年,月'形式");
        System.out.println("若要计算某年某月的某天是周几,则输入:'年,月,日'形式");
		Scanner sc = new Scanner (System.in);
		String s = sc.nextLine();
		String[] c = s.split(",");
		int t = c.length;
		
		//根据c数组的长度,利用switch来做判断,分别执行不一样的程序
		switch(t){
		
		//当输入长度是1时,只有年份的输入,则是计算平年闰年
		case 1:
			Integer year =Integer.valueOf(c[0]);
			if((year%4==0)&&(year%100!=0)||year%400==0){
				System.out.println(year+"是闰年");
			}else{
				System.out.println(year+"是平年");
			}
			break;
			
			//当输入长度是2时,只有年份以及月份的输入,则要计算当年的那个月有多少天
		case 2:
			Integer year1 =Integer.valueOf(c[0]);
			Integer month1 =Integer.valueOf(c[1]);
			if((year1%4==0)&&(year1%100!=0)||year1%400==0){
			
				int mon=a[month1];
				System.out.println(year1+"年的"+month1+"月有"+mon+"天");
				
			}else{
			
				int mon=a[month1];
				System.out.println(year1+"年的"+month1+"月有"+mon+"天");	
			}
			
			break;
			
			//当输入长度为3时,我们需要计算那天是周几
		case 3:
			Integer year2 =Integer.valueOf(c[0]);
			Integer month2 =Integer.valueOf(c[1]);
			Integer day =Integer.valueOf(c[2]);
			
			int a1=(year2-1968-1)/4;//计算year2到1970年之间闰年的次数
			int a2 = (year2-1970-1)*365+a1; //计算month之前几个月的总天数
			
			//首先先判断是否是闰年,若是闰年,则进行一下操作
			if((a2%4==0)&&(a2%100!=0)||a2%400==0){
				//day2用于计算那一年月份的天数
				int day2=0;
				//利用数组,计算前几个月的天数总值
				//假如输入的是第五个月的某一天,则先要计算前四个月有多少天,既然是计算闰年,则是使用闰年的那个数组
				for(int i =1;i<month2;i++){
					day2+=a[i];
				}
				//week等于年份天数+月份天数+当前月的第几天,由于1970年1月1号是周四,所以加上4。再利用取余的方法得到星期
				week=(a2+day2+day+4)%7;
				if(week==0){
					System.out.println("这天是星期天");
				}else{

					System.out.println(year2+"年的"+month2+"月的"+day+"日是星期"+week);	
				}
				
			}else{
				//day2用于计算那一年月份的天数
				int day2=0;
				//利用数组,计算前几个月的天数总值
				//若计算的是第五个月的某一天,则先要计算前四个月有多少天
				for(int i =1;i<month2;i++){
					day2+=b[i];
				}
				//week等于年份天数+月份天数+当前月的第几天,由于1970年1月1号是周四,所以加上4。再利用取余的方法得到星期
				week=(a2+day2+day+4)%7;
				if(week==0){
					System.out.println("这天是星期天");
				}else{
					System.out.println(year2+"年的"+month2+"月的"+day+"日是星期"+week);	
				}
			}
			break;
		default:
			System.err.println("请正确输入数据");
			break;
		}
	}
	
}

猜你喜欢

转载自suifan0116.iteye.com/blog/2344512
今日推荐