根据用户输入的年月显示当月的日历源码【走进JAVA-2.9】

import java.util.*;

public class Test_029 {
	public static void main(String[] args) {
		int days = 0; // 计算1900-1-1到用户输入的的日期的 总天数; 1900-1-1到用户输入的天数,七取模,则正好是星期几
		Boolean rn = true;
		int  day=0;
		Scanner s = new Scanner(System.in);
		System.out.println("请输入你要查询的年份");
		int year = s.nextInt();
		System.out.println("请输入你要查询的月份");
		int month = s.nextInt();
		for (int a = 1900; a < year; a++) {					//求1900-1-1到用戶輸入年份-1的总天数; 
			if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
				days += 366;
			} else {
				days += 365;
			}
		}
		//判断用户输入的年份是否为闰年;
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {	
			 rn=true;
		} else {
			rn=false;
		}
		
		//将1900-1-1到用户输入的年份-1的天数 +  用户输入的那一年的月份-1 的总天数计算起来 得到公式 =1990-1-1 到总天数 +1  %7 =  当月日期对应的星期
		for (int a = 1; a < month; a++) {
			if (rn == true && a == 2) {
				days += 29;
			} else if (rn != true && a == 2) {
				days += 28;
			} else if (a == 1 || a == 3 || a == 5 || a == 7 || a == 8 || a == 10 || a == 12) {
				days += 31;
			} else {
				days += 30;
			}
		}
		//判断用户输入的月的总天数是多少
		if(rn==true && month==2) {
			day=29;
		}else if (month==2 && rn==false) {
			day=28;
		}else if(month==1 || month ==3|| month ==5 || month==7 ||month==8||month==10 ||month==12) {
			day=31;
		}else {
			day=30;
		}
		//求出那一个月的第一天所对应的日期是多少;
		int weekday = (days + 1) % 7; // 求出用户输入的年份以及月份,查询出当月的日期所对应的星期
		System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天");
		
		//weekday 对应的当月一号的星期,
		for (int a = 1; a <weekday; a++) {
			System.out.print("\t");
		}
		//打印那一个月的每一天,并且所对应到周末则换行输出,如果没有对应周日,则继续输出. 
		for(int a=1;a<=day;a++) {
			if(a>9) {			//输出好看点,将小于十的数字添加一个空格;
			 if(((weekday)%7)==7 || weekday%7==0) {
				 System.out.print(" "+a+"\n");}
			 else {
			  System.out.print(" "+a+"\t");	 
			 }
			 weekday++;
			}
			else {
				 if(((weekday)%7)==7 || weekday%7==0) {
					 System.out.print("  "+a+"\n");}
				 else {
				  System.out.print("  "+a+"\t");	 
				 }
				 weekday++;
					
			}
		}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值