简单的控制台日历 完善上下月份更新(2)

该代码示例展示了如何使用Java的Calendar类在控制台上创建2022年5月的日历模板。程序首先初始化年份和月份,然后通过计算获取1号是周几,接着填充上月、当月和下月的日期,最后按周打印日历。

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

package 控制台日历Zing;

import java.util.Calendar;

/**
 * 写控制台日历简单模板
 * 
 * @author Administrator
 *
 */
public class 控制台日历ZingW1 {
	public static void main(String[] args) {

		// 属性:固定年,月初始属性,方便测试
		int year = 2022;
		int month = 5;

		// 定义数组来存储整个月份的数字
		int[] dateNums = new int[42];
		// 定义数组下标
		int Index = 0;

		// 打印星期栏
		System.out.println("一\t二\t三\t四\t五\t六\t日");

		// 运用Calendar时间操作,获取日期对象,得到当前月份1号是周几
		Calendar c = Calendar.getInstance();
		// 设定获取日期,获取1号是周几
		c.set(year, month - 1, 1);// 月份必须减一:月份数组里月份存储为0~11
		int week = c.get(Calendar.DAY_OF_WEEK) - 1;// 必须减一:周日为1,周六为7
//		System.out.println("week:" + week);// 打印判断

		// 上月日期先 打印空格**,便于后续获取月最大数打印天数
		// 这里有个问题,当月份为五月份时,week = 1 - 1=0,星期日为1号
		// 因此做一次中式判断,给周日赋予7
		week = (week == 0) ? 7 : week;
		// 获取上个月份最大天数信息
		Calendar c1 = Calendar.getInstance();
		c1.set(year, month - 1, 1);
		c1.add(Calendar.MONTH, -1);
		int lastDate = c1.getActualMaximum(Calendar.DAY_OF_MONTH);
//		System.out.println("last:" + lastDate);
		int day = lastDate - week + 2;
		for (int i = 1; i < week; i++) {// 小于空数
			dateNums[Index++] = day++;// 自己累加
//			System.out.print(i + "\t");
		}

		// 打印本月的天数
		int nowDate = c.getActualMaximum(Calendar.DAY_OF_MONTH);
//		System.out.println("nowDate:" + nowDate);
		for (int i = 1; i <= nowDate; i++) {
			dateNums[Index++] = i;

			// 发现打印的数字并不会换行
//			System.out.print(i + "\t");
//			if ((i + week - 1) % 7 == 0) {
//				System.out.println();
//			}

		}
		// 获取下个月的信息,下个月天数等于数组长度减去已经储存的数
		int nextDate = dateNums.length - Index;
		for (int i = 1; i <= nextDate; i++) {
			dateNums[Index++] = i;

		}
		for (int i = 0; i < dateNums.length; i++) {// i要从0开始因为是数组
			System.out.print(dateNums[i] + "\t");
			if ((i + 1) % 7 == 0) {// 数组从0开始
				System.out.println();
			}
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值