Java中使用Calendar制作手机版万年历(附带最终运行图和详细注解)

利用Calendar类手写万年历(手机版:周日在前)

首先,我们看一下需要实现的具体功能:
用户输入数字,显示如下所示对应的功能
1.查看上个月的日历
2.查看下个月的日历
3.查看去年本月的日历
4.查看明年本月的日历
5.查看指定年月的日历

我们先来用代码做一个实现日历功能的主体结构

/**
 * 手写手机版万年历 日历排序: 日 一 二 三 四 五 六
 */
public class Exercise {
	public static void main(String[] args) {
		// 日历的主体功能
		// 首先需要让用户输入操作指示,就需要创建一个键盘扫描器
		Scanner key = new Scanner(System.in);
		// 先获取当前的日期
		// 创建一个日期类
		Calendar cal = new GregorianCalendar();
		// 显示日历
		showTime(cal);
		// 创建循环,让程序一直可用
		while (true) {
			// 打印帮助文档,提示用户输入
			help();
			// 接收用户输入
			int con = key.nextInt();
			// 判断用户输入,执行对应功能
			switch (con) {
				case 1:// 查看上个月的日历
					// 调用查看上个月日历的方法
					preMonth(cal);
					break;
				case 2:// 查看下个月的日历
					// 调用查看下个月日历的方法
					nextMonth(cal);
					break;
				case 3:// 查看去年本月的日历
					// 调用查看去年本月日历的方法
					preYear(cal);
					break;
				case 4:// 查看明年本月的日历
					// 调用查看明年本月日历的方法
					nextYear(cal);
					break;
				case 5:// 查看指定年月的日历
					// 调用查看指定年月日历的方法
					checkYearMonth(key, cal);
					break;
				default:// 如果不能匹配用户输入,则默认一个值
					System.out.println("请输入正确的操作指令!");

			}

		}

	}

然后我们采用封装的思想,将对应实现功能的代码封装起来,方便后续的调用

1.封装帮助文档help()方法:

/*
	 * 帮助文档
	 */
	private static void help() {
		//将日历与帮助文档的内容分开
		System.out.println();
		//帮助文档
		System.out.println("================================");
		System.out.println("*****欢迎来到小可爱私人日历*****");
		System.out.println("~~~~~~1.查看上个月的日历~~~~~~~~");
		System.out.println("~~~~~~2.查看下个月的日历~~~~~~~~");
		System.out.println("~~~~~~3.查看去年本月的日历~~~~~~");
		System.out.println("~~~~~~4.查看明年本月的日历~~~~~~");
		System.out.println("~~~~~~5.查看指定年月的日历~~~~~~");
		System.out.println("=================================");
		System.out.println("请输入操作指令:");
		
	}

2.封装一个打印日历showTime()的方法:

/*
	 * 封装一个打印日历的方法
	 */

	private static void showTime(Calendar cal) {
		// 日 一 二 三 四 五 六
		// 1.获取这个月的总天数,用过int类型的数接收
		int totalDays = cal.getActualMaximum(Calendar.DATE);
		// 打印这个月的总天数
		System.out.println("当月的总天数为:" + totalDays + "天");
		// 设置日期为当月的第一天
		cal.set(Calendar.DATE, 1);
		// 输出设置完成的日期
		System.out.println("当前日期为:" + cal.getTime());
		// 获取当月的第一天是周几,周日为第一天,按日、一、二、三、四、五、六排列
		// 输出当月的第一天是周几,定义一个变量去接收
		int week = cal.get(Calendar.DAY_OF_WEEK);
		// 判断week的值,
		if (week == 1) {
			System.out.println("本月的第一天是周日!");
		} else {
			System.out.println("本月的第一天是周" + (week - 1));
		}
		/*
		 * 分析日期前面需要的空格数,将日期与周数对应起来 week 周几 空格数 1 周天 0个空格 2 周一 1个空格 3 周二 2个空格 4 周三 3个空格 5
		 * 周四 4个空格 6 周五 5个空格 7 周六 6个空格
		 */
		// 打印周数
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		// 定义一个计数器
		int index = 0;
		// 打印一号前面的空格数
		for (int i = 1; i <= week - 1; i++) {
			System.out.print("\t");
			index++;
		}
		// 打印日期号
		for (int i = 1; i <= totalDays; i++) {
			System.out.print(i + "\t");
			index++;
			if (index % 7 == 0) {
				System.out.println();
			}
		}

	}

3.封装查看上个月日历preMonth(cal)的方法:

/*
	 * 查看上个月日历的方法
	 */
	private static void preMonth(Calendar cal) {
		//将日期上调一个月
		cal.add(Calendar.MONTH, -1);
		//调用打印日历的方法
		showTime(cal);
		
	}

4.封装查看下个月日历nextMonth(cal)的方法:

/*
	 * 查看下个月日历的方法
	 */
	private static void nextMonth(Calendar cal) {
		//将日期下调一个月
		cal.add(Calendar.MONTH, +1);
		//调用打印日历的方法
		showTime(cal);
		
	}

5.封装查看明年本月日历preYear(cal)的方法:

/*
	 * 查看明年本月日历的方法
	 */
	private static void preYear(Calendar cal) {
		//将日期上调一年
		cal.add(Calendar.YEAR, -1);
		//调用打印日历的方法
		showTime(cal);
		
	}

6.封装查看明年本月日历nextYear(cal)的方法:

/*
	 * 查看明年本月日历的方法
	 */
	private static void nextYear(Calendar cal) {
		//将日期下调一年
		cal.add(Calendar.YEAR, +1);
		//调用打印日历的方法
		showTime(cal);
		
	}

7.封装查看指定年月日历checkYearMonth(key, cal) 的方法:

/*
	 * 查看指定年月日历的方法
	 */
	private static void checkYearMonth(Scanner key, Calendar cal) {
		//定义一个int变量,获取查询当天的时间
		int hor = cal.get(Calendar.HOUR_OF_DAY);
		int min = cal.get(Calendar.MINUTE);
		//提示用户输入指定年份
		System.out.println("请输入您要查询的年份:(格式:2020-06)");
		//接收用户输入的年份
		String str = key.next();
		//将接收到的数转换为Calendar类型
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		//输出转换后的日期
		Date date = null;
		try {
			date = sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		//设置日期为用户输入的日期
		cal.setTime(date);
		//设置查询到的日期当时的时间
		cal.set(Calendar.HOUR_OF_DAY, hor);
		cal.set(Calendar.MINUTE, min);
		//调用打印日历的方法
		showTime(cal);
	}

最后,我们来看看功能效果图吧!
在这里插入图片描述
用户输入指令1时:
在这里插入图片描述
用户输入操作指令2时:
在这里插入图片描述
用户输入操作指令3时:
在这里插入图片描述
用户输入操作指令4时:
在这里插入图片描述
用户输入操作指令5时:
在这里插入图片描述
今日分享就到这儿了,有喜欢的朋友们可以加V私信我哟,咱们一起探讨Java的学习心得!
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值