简易万年历,教你巧妙使用Java中的Calendar类

利用calendar类手写电脑上的日历(日历中周日是第一天)

首先我们看一下日历的基本功能:
输入以下数字,显示相对应的日期:
1.查看上个月的日历
2.查看下个月的日历
3.查看去年本月的日历
4.查看明年本月的日历
5.查看指定年月的日历
下面我们用代码来具体实现吧!

首先我们做一个实现日历功能的主体结构

public class MobCal {
	
	//程序入口
	public static void main(String[] args) {
		//创建键盘扫描器
		Scanner key = new Scanner(System.in);
		//先获取当前日期
		//通过 静态工厂创建Calendar类
		Calendar cal = Calendar.getInstance();
		//打印日历,调用打印日历的方法
		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("请输入正确的操作指令!");
						
			
			}
		}
		
		
		
	}

然后我们分别实现里面对应的功能,并将其封装起来

封装一个帮助文档的方法:

/*
	 * 封装一个帮助文档的方法
	 */
	private static void help() {
		//将日历与帮助文档的内容分开
		System.out.println();
		System.out.println("================================");
		System.out.println("*****欢迎来到小可爱私人日历*****");
		System.out.println("\t1.查看上个月的日历\t");
		System.out.println("\t2.查看下个月的日历\t");
		System.out.println("\t3.查看去年本月的日历\t");
		System.out.println("\t4.查看明年本月的日历\t");
		System.out.println("\t5.查看指定年月的日历\t");
		System.out.println("请输入指令:");
	}

封装一个打印日历的方法:

/*
	 * 打印日历的方法
	 */
	private static void showTime(Calendar cal) {
		//获取这个月的总天数
		int totalDays = cal.getActualMaximum(Calendar.DATE);//用int类型的值接收
		//输出当前月的总天数
		System.out.println("本月共有"+totalDays+"天");
		//设置日期为当月的第一天
		cal.set(Calendar.DATE, 1);
		//输出设置完成后的日期
		System.out.println(cal.getTime());
		//获取月份的第一天是周几,此处周日为第一天
		//定义一个int类型的变量去接收
		int week = cal.get(Calendar.DAY_OF_WEEK);
		//判断week是否等于1
		if(week==1) {
			System.out.println("本月的一号是周:"+"日");
		}else {
			//如果不等于1
			//输出获取到的值
			System.out.println("本月的一号是周:"+(week-1));
		}
		//分析日期前面需要的空格数,将日期与周数对应起来
		//week	周几	空格数
		//1		周天	6个空格		
		//2		周一	0个空格
		//3		周二	1个空格
		//4		周三	2个空格
		//5		周四	3个空格
		//6		周五	4个空格		
		//7		周六	5个空格
		//如果week等于1,表示一号是周天,前面需要6个空格(特殊的拿出来单独做)
		if(week==1) {//判断week是否等于1
			//假如week等于1,将week的值赋值为8
			week=8;		
		}
		//打印星期数
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		//定义一个计数器,时期对空格和日期数都进行计数
		int num = 0;
		//输出一号前面的空格数
		for(int i=1;i<week-1;i++) {
			System.out.print("\t");	
			num++;//每打印一个空格计数一次
		}
		//打印日期号
		for(int i=1;i<=totalDays;i++) {
			System.out.print(i+"\t");
			num++;//每打印一个日期号,计数一次
			//打印到周日,就换行
			if(num%7==0) {
				System.out.println();
			}
		}
	}

封装查看上个月日历的方法

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

封装查看下个月日历的方法:

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

封装查看去年本月日历的方法

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

封装查看明年本月日历的方法:

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

封装查看指定年月日历的方法

/*
	 * 查看指定年月日历的方法
	 */
	private static void checkYearMonth(Scanner key, Calendar cal) {
		//提示用户输入要查询的年月
		System.out.println("请输入您要查询的日期:(格式:2020-08)");

		//接收用户输入的日期
		String str = key.next();
		//将String格式的日期转为date再转为Calendar
		//创建一个格式化日期的类
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		Date date = null;
		try {
			date= sdf.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		//设置日期为用户输入的日期
		cal.setTime(date);		
		//调用打印日历的方法
		showTime(cal);
		
	}

我们来看一下运行效果图吧:

1.查看上个月的日历
简易万年历,教你巧妙使用Java中的Calendar类_第1张图片
2.查看下个月的日历
简易万年历,教你巧妙使用Java中的Calendar类_第2张图片
3.查看去年本月的日历
简易万年历,教你巧妙使用Java中的Calendar类_第3张图片
4.查看明年本月的日历
简易万年历,教你巧妙使用Java中的Calendar类_第4张图片
5.查看指定年月的日历
简易万年历,教你巧妙使用Java中的Calendar类_第5张图片
今日分享就到这儿了,希望对正在入门Java的你有所帮助!

你可能感兴趣的:(小系统)