2. 计算出1900年1月1日至当前日期之间总共间隔多少天,将其除以7取余数,该结果即为当月第一天是星期几,按日历格式输出

//输入一个日期,2010-10  输出该月的月历:
//**********************************
//		10月
//**********************************
//日	一	二	三	四	五	六
//					1	2
//3	4	5	6	7	8	9
//10	11	12	13	14	15	16
//17	18	19	20	21	22	23	
//24	25	26	27	28	29	30
//31
//提示:1900-1-1 是星期一

package Data;

import java.util.Scanner;

public class Data {
	private static final int WEEK = 7;  //一周总共有多少天
	private static final int YEAR = 1900;   //作为参照的年份
	private static final int[] MONTHDAYS =   //一年各月的天数(以平年来算)
			new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	private static final String[] WEEKDAYS =   
			new String[]{"日", "一 ", "二 ", "三 ", "四 ", "五 ", "六"};
	
	public static void main(String[] args)
	{
		int year, month, day;   //分别存放年月日
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入年月日");
		year = input.nextInt();
		month = input.nextInt();
		day = input.nextInt();
		
		int years;   
		int totalDays;//总共天数
		
		//对年的处理
		years = year - YEAR;   //从这年到参照年之间总共多少年
		int runNian = 0;
		runNian = years  / 4;  //输入的日期到1900年之间总共有多少闰年
		
		//月份小于2且那一年是闰年
		boolean isRun = year % 400 == 0 || year % 4 == 0 && year % 100 != 0; 
		//单输入的年份是闰年的同时,月份小于等于2月,闰年个数需要减1,即天数减1
		if (month <= 2 && isRun)
		{
			totalDays = years *365 + runNian - 1;
		}
		else
		{
			totalDays = years * 365 + runNian; 
		}
		
		//对月份的处理
		for (int i = 0; i < month - 1; ++i)
		{
			totalDays += MONTHDAYS[i];
		}
		
		//对日的处理
		totalDays += day;
		
		
		int theDay = totalDays % WEEK;//今天为星期几
		int monthFirstDay = (totalDays - day + 1) % WEEK;   //这个月第一天为星期几
		//输出月历格式
		System.out.println("这天是星期" + WEEKDAYS[theDay] + theDay);
		System.out.println("这个月的月历为");
		System.out.println("***************************************");
		System.out.println("               " + month + "月                                                   ");
		System.out.println("***************************************");
		//输出日一二三四五六
		for (int i = 0; i < WEEK; ++i)
		{
			System.out.format("%-17s", WEEKDAYS[i]);
		}
		System.out.println();
		//此月有多少天
		int monthDays = MONTHDAYS[month - 1];
		//如果这年是闰年,且这个月是2月,天数加1
		if (isRun && month == 2)
		{
			monthDays += 1;
		}
		for (int i = 0, j = 0; i < monthDays + monthFirstDay; ++i)
		{   //月历前几天总是会有几个空格
			if (i < monthFirstDay && monthFirstDay != 7)
			{
				System.out.format("%-8s", " ");
			}
			else  //按顺序输出日期
			{
				System.out.format("%-8d", j + 1);
				++j;
			}
			//每七次循环换一行
			if ((i + 1) % 7 == 0)
			{
				System.out.println();
			}
		}
	
	}
}



你可能感兴趣的:(菜鸟学java)