java 使用Calendar制作日历

本文详细介绍如何利用Java的Calendar类创建一个动态日历。通过自定义MyCalendar类,可以获取并显示指定年月的日历格式,包括处理每月第一天的星期定位及最大天数。文章还分享了bug修复经验,确保日历正确展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个类MyCalendar(Calendar抽象类)

该抽象类可以直接获取本机的日历实例,并通过YEAR,MONTH,DAY_OF_MONTH等方法操控该日历字段

创建构造器

定义属性年月,并创建构造器,,下面是代码:

    private int year;
	private int month;
	private MyCalendar(int year,int month) {
		this.year = year;
		this.month = month;
	}

获取实例

使用getinstance获取实例,并对日历属性初始化化。下面是代码:

	Calendar c = Calendar.getInstance();
	c.set(Calendar.YEAR, year);
	c.set(Calendar.MONTH, month-1);
	c.set(Calendar.DAY_OF_MONTH, 1);

因为在Calendar.MONTH是从0~11,所以我们实际输入的值会比我们程序的月份值+1个月,所以我们在这里先事先-1处理。这样程序月份会和我们输入的月份统一。

日历每个月的格式处理

定义一个变量获取每个月第一天是这个星期的第几天,由此可获得每个月一号前可空几天
再定一个变量获取当前月份的最大天数,下面是代码: c.get(Calendar.DAY_OF_WEEK) - 1处同Calendar理

	int weekDay = c.get(Calendar.DAY_OF_WEEK) - 1; 
	int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);

定义一个变量用来控制换行,但是先使用该变量控制输出1日前的空天数,使用for循环,使变量i小于之前的定义的weekDay,得出空格数,同时count自加,然后每当count = 7时换行。一直循环到这个月最大的天数。

		int count = 0;
		for (int i = 1; i < weekDay; i++) {
			System.out.print("\t");
			count++;
		}
		for (int i = 1; i <= days; i++) {
			if (count == 7) {
				System.out.println();
				count = 0;
			}
			System.out.print(i+"\t");
			count++;
		}	

测试

调用主函数,输入要查询的年月

	public static void main(String[] args) {
		new MyCalendar(2020, 7).showCaldendar();
	}

测试

bug修复

测试时发现每个月的第一天为当周的第0天时,出现bug,因为DAY_OF_WEEK是从周日到周六计算的,对应的索引为0~6,所以当weekDay=0时,直接将其重新赋值weekDay=7。
在for循环前加入下面代码:

	if (weekDay == 0) {
			weekDay = 7;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值