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也感兴趣,欢迎大家前来共同探讨,咱们下期见吧~~