java 使用Calendar制作日历

创建一个类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;
	}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值