Calendar等日期类的应用----万年历

Calendar等日期类的应用----万年历

上期咱们简单的说了下Calendar,Date,SimpleDateFormat,今天咱们就来应用一下

首先我们看一下日历的基本功能:
输入以下数字,显示相对应的日期:
1.查看上个月的日历
2.查看下个月的日历
3.查看去年本月的日历
4.查看明年本月的日历
5.查看指定年月的日历

直接来看大概效果图:

在这里插入图片描述

下面咱们就来用代码实现它:go

首先把日历功能的主体结构构建出来:

public class CalendarTest {
	//定义一个全局静态的键盘扫描器,方便在主方法中使用
	private static Scanner in = new Scanner(System.in);
	public static void main(String[] args) {
		//创建格林威治时间
		Calendar cal = Calendar.getInstance();
        //打印本月的日历
		showTime(cal);
        //死循环,可以让用户来输入
		while(true) {
			//打印提示信息的方法
			help();
			//定义变量接收用户输入的信息
			int num = in.nextInt();
			if(num == 1) {
				//查看上个月日历的方法
				preMonth(cal);
			}else if(num == 2) {
				//查看下个月日历的方法
				nextMonth(cal);
			}else if(num == 3) {
//				查看去年本月的日历
				preYear(cal);
			}else if(num == 4) {
				//查看明年本月的日历
				nextYear(cal);
			}else if(num == 5) {
				//查看指定年月的日历
				checkYearMonth(cal);
			}else if(num == 6) {
				System.out.println("系统退出,欢迎下次使用~~~");
				break;
			}else {
				System.out.println("请输入正确指令~~~~~");
			}
		}
		
	}

因为这里面的很多代码都是要重复使用的,所以,咱们使用方法的封装调用来实现,根据主方法中的方法来依次编写代码

首先写打印本月日历的showTime(cal)方法,也是本程序中最重要的一部分,这个方法写好,在后面的代码中可以直接来调用

	/**
	 * 打印日历的方法
	 * @param cal
	 */
	private static void showTime(Calendar cal) {
		//首先获取这个月有多少天
		int daySum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		//获取年份
		int year = cal.get(Calendar.YEAR);
		//获取月份
		int month = cal.get(Calendar.MONTH)+1;
		System.out.println("当前时间为:"+cal.getTime());
		System.out.println(year+"年"+month+"月有:"+daySum+"天");
		//设置为当月的第一天
		cal.set(Calendar.DAY_OF_MONTH, 1);
		//获取这个月的第一天是周几
		int week = cal.get(Calendar.DAY_OF_WEEK);
		//因为国外1是周天要有6个空格,2是周一要0个空格等等,7是周六要5个空格
        //分析日期前面需要的空格数,将日期与周数对应起来
		//week	周几	空格数
		//1		周天	6个空格		
		//2		周一	0个空格
		//3		周二	1个空格
		//4		周三	2个空格
		//5		周四	3个空格
		//6		周五	4个空格		
		//7		周六	5个空格
		if(week == 1) {
			week = 8;
			System.out.println(month+"月的第一天是周日");
		}else {
			System.out.println(month+"月的第一天是周"+(week-1));
		}
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		
		//定义一个变量用来计数,当到周日的时候,进行换行
		int falg = 0;
		//打印空格
		for(int i = 1;i<week-1;i++) {
			System.out.print("\t");
			//将打印的空格,每次加1
			falg++;
		}
		//打印i的值
		for(int i = 1;i<=daySum;i++) {
			System.out.print(i+"\t");
			//将打印过的空格,在加上i的值
			falg++;
			//如果falg对7取余,进行换行
			if(falg % 7 == 0) {
				System.out.println();
			}
		}
        //换行
		System.out.println();
	}

接着,来搞一些提示用户输入语,方便用户操作:

/**
 * 打印提示信息的方法
 */
	private static void help() {
		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("6.退出");
		System.out.println("***********************");
		System.out.println("请输入指令:");
	}

然后就是来写打印上个月日历的方法:
/**
	 * 查看上个月日历的方法
	 * 因为打印日历的方法咱们都上面都已经封装好了,所以这里咱们直接来调用传值就可以使用了
	 * @param cal
	 */
private static void preMonth(Calendar cal) {
	////因为要查看上个月,所以要对月份进行修改,-1是上个月,1是这个月
		cal.add(Calendar.MONTH, -1);
    //调用打印日历的方法
		showTime(cal);
	}
查看写个月日历的方法:
/**
	 * 查看下个月日历的方法
	 * @param cal
	 */
	private static void nextMonth(Calendar cal) {
		cal.add(Calendar.MONTH, 1);
		showTime(cal);
	}
查看去年本月的日历的方法:
/**
	 * 查看去年本月的日历
	 * @param cal
	 */
	private static void preYear(Calendar cal) {
		cal.add(Calendar.YEAR, -1);
		showTime(cal);
	}
查看明年本月的日历的方法:
/**
	 * 查看明年本月的日历
	 * @param cal
	 */
	private static void nextYear(Calendar cal) {
		//因为要查看明年的,所以要对年份进行修改,-1是去年,所以这里面要用1
		cal.add(Calendar.YEAR, 1);
		showTime(cal);
	}
查看指定年月的日历方法:
/**
	 * 查看指定年月的日历
	 */
	private static void checkYearMonth(Calendar cal) {
		//获取时
		int hour = cal.get(Calendar.HOUR);
		//获取分
		int minute = cal.get(Calendar.MINUTE);
		System.out.println("请输入年月:(格式:2020-05)");
		String str  = in.next();//定义变量用来接收用户输入的时间
		//格式化时间
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		Date date = null;
		try {
			//使用parse()方法,将时间转换成date类型
			date = sdf.parse(str);
			//将时间设置成Calendar里面
			cal.setTime(date);
			//设置获取到的时
			cal.set(Calendar.HOUR_OF_DAY, hour);
			//设置获取到的分
			cal.set(Calendar.MINUTE, minute);
			//查看日历
			showTime(cal);
		} catch (ParseException e) {
			e.printStackTrace();
		}
//		System.out.println(str);
	}

好了,代码这么多,下面来看看效果吧:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本期简单的小应用,就这么多结束了,如果你对Java也感兴趣,欢迎大家前来共同探讨,咱们下期见吧~~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45280147/article/details/106444229