如何用Java根据日期年月打印该月的日历

打印日历

计算出1900年1月1日至当前日期之间总共间隔多少天,将其除以7取余数,该结果即为当月1号是星期几。提示:1900年1月1日星期一

import java.util.Scanner;

public class TestShowCalendar {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		// 输入年、月
		System.out.println("输入年份:");
		int year = scanner.nextInt();
		System.out.println("输入月份:");
		int month = scanner.nextInt();

		// 判断平闰年
		int flag;// flag==1是闰年,flag==0是平年
		if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
			flag = 1;
		else
			flag = 0;

		// 计算天数
		int days = days_count(year, month, flag);// 记录所输入日期距1990年1月1日总共有多少天

		// 计算该月1日星期几
		int one_week = days % 7;

		// 开始排版
		System.out.println("**************************************************");
		System.out.println("\t\t" + month + "月");
		System.out.println("**************************************************");
		System.out.println("日\t一\t二\t三\t四\t五\t六");

		for (int i = 0; i < one_week; i++) {
			System.out.print("\t");
		}

		int month_days;
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			month_days = 31;
			break;
		case 2:
			month_days = 28 + flag;
			break;
		default:
			month_days = 30;
		}

		for (int i = 1; i < month_days + 1; i++) {
			System.out.print(i + "\t");
			if ((one_week + i) % 7 == 0)
				System.out.println();
		}

	}

	// 计算天数的方法
	public static int days_count(int year, int month, int flag) {
		int days;
		int year_add = (year - 1900);
		if (year_add < 0)
			year_add = -year_add;
		days = year_add * 365 + (year_add - 1) / 4;// 计算了所输入年份1月1日距1990年1月1日是第几天

		switch (month - 1) {
		case 11:
			days += 30;
		case 10:
			days += 31;
		case 9:
			days += 30;
		case 8:
			days += 31;
		case 7:
			days += 31;
		case 6:
			days += 30;
		case 5:
			days += 31;
		case 4:
			days += 30;
		case 3:
			days += 31;
		case 2:
			days += 28 + flag;
		case 1:
			days += 31;
		case 0:
			days += 1;
			break;
		default:
			System.out.println("请输入正确的月份!");
			break;

		}

		return days;
	}

}

输出示例:
在这里插入图片描述

不过很遗憾这段代码只能准确打印出1900年1日以后的日历,等我找到更好的方法再进行更换。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~祝今在

喝个茶水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值