利用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.查看上个月的日历

2.查看下个月的日历

3.查看去年本月的日历

4.查看明年本月的日历

5.查看指定年月的日历

今日分享就到这儿了,希望对正在入门Java的你有所帮助!
本文介绍如何使用Java的Calendar类创建一个具备查看上下月、上今年、明年及指定年月日历功能的小程序,详细展示了代码实现过程。
742

被折叠的 条评论
为什么被折叠?



