利用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的学习心得!