Java万年历案例

Java万年历案例

用户输入年份和月份,打印出当月的日历信息

要点:

因为万年历里面的程序设置的初值是1900年1月1日。 所以日期的计算要从1900年1月1日开始

方法:
  1. 算出1900年1月1日到输入年月的总天数
  2. 使用总天数算出输入月的第一天是周几
  3. 算出输入月有多少天
  4. 输出打印
  5. 闰年条件:被4整除并且不能被100整除,或者被400整除
    if(i%40 && i%100!=0 ||i%4000)
步骤:
1.获取1900年1月1日到输入年份和月份的总天数
	//输入:
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = sc.nextInt();
		System.out.println("请输入月:");
		int month = sc.nextInt();
		
		//得到1900,1,1年到输入年月的总天数
		int allDayOfYear = 0;
		for(int i =1900;i<year;i++){
			if(i%4==0 && i%100!=0 ||i%400==0){ 
				allDayOfYear +=366;//闰年就加366天
				
			}else{
				allDayOfYear +=365; //平年365天
			}
		}
		//求月之间的差
		int allDayOfMonth=0;
		for(int i = 1;i<month;i++){
			switch(i){
				case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				allDayOfMonth +=31;
				break;
				case 4:case 6:case 9:case 11:
					allDayOfMonth +=30;
					break;
				case 2:
					if(year%4==0 && year%100!=0 ||year %400==0){
						allDayOfMonth +=29;
					}else{
						allDayOfMonth +=28;
					}
			}
		}
		
		//合并天数
		int allDay = allDayOfYear+allDayOfMonth;
2.算出输入月份的第一天是周几
//算出当月第一天是星期几
		int week = allDay%7 +1; //+1算出的是输入月的第一天,不加1算出的是上月最后一天是星期几
		if(week==0){
			week =7;
		}
3.所处当月有多少天
//算出当月天数
		int day = 0;
		switch(month){
				case 1:case 3:case 5:case 7:case 8:case 10:case 12:
					day =31;     //1,3,5,7,8,10,12一直是31天
				break;
				case 4:case 6:case 9:case 11:
					day=30; 	// 4,6,9,11一直是30天
					break;
				case 2:
					if(year%4==0 && year%100!=0 ||year %400==0){  //二月会有平闰年之分
						day=29;  //闰年29天
					}else{	
						day = 28;  //平年28天
					}
			}
4.打印日历
//打印万年历
		System.out.println(year+"年"+month+"月");
		System.out.println("-------------------------------------------------------");
		System.out.println("一\t二\t三\t四\t五\t六\t七");
		
		
		int flage = 0; //声明一个变量,记录当前输入的是周几的日期,如果到了7或者7的倍数,就进行换行,也就是标志量的作用
		//打印如果1号不是星期1前面的空格
		for(int i =1;i<week;i++){   //week是算出的当前月第一天周几
			System.out.print("\t");  //注意这里不换行
			flage ++;
		}
		//打印日期
		for(int i=1;i<=day;i++){   //遍历打印当前月的天数
			System.out.print(i+"\t");
			flage++;    
			
			if(flage%7==0){  //flage 每加到7或者7的倍数就换行,对应周几
				System.out.println("\n");
				
			}
		}

效果: 以2024年5月为例

在这里插入图片描述

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值