在MyEclipse 10控制台输出可视化日历

开发工具与关键技术:MyEclipse 10、JAVA
作者:曾浩源
撰写时间:2019年04月22日

在java.util中,有两种类可以实现获取时间:Date,Calendar。
使用它们实现一个在MyEclipse 10控制台输出可视化日历的小功能:
我们知道单个日历格式如下:
在这里插入图片描述
首先想到的是最简单的,把最前面的排的:
(日一二三四五六)打印出来
无需多想干就对了

System.out.println("日\t一\t二\t三\t四\t五\t六");

就这么简单。
接下来有三个疑点:

一、1号之前的空格应该如何实现。
二、如何确定每月的最后一天该是30或31甚至29和28。
三、遇到星期六,需要换行。

强大Calendar类给我们提供了不少实用的方法:

第一个问题:

首先将之前的日历保存一下到某个变量里,后面用于显示某一天;

int today=calendar.get(Calendar.DATE);

然后就是把 日 设置成1号;

calendar.set(Calendar.DATE, 1);

最后再获取一号是星期几,获取的星期数是以int的形式返回并赋值给todayweek,并且该方法是以星期天为1,星期一为2的形式返回

	int todayweek=calendar.get(Calendar.DAY_OF_WEEK);

第一个问题就只剩下一个for循环,输出空格步骤了,已经阻挡不了我们的步伐了。

第二问题最简单,一步到位:

直接获取本月最大的天数是哪一天,好了,这样子就知道循环多少次了。

int lastday=calendar.getActualMaximum(Calendar.DATE);

第三个问题,就是在循环每一次的时候获取一下该日的星期数,然后使用if语句进行判断,为星期六就进行换行。

int setweek=calendar.get(Calendar.DAY_OF_WEEK);
if (setweek==Calendar.SATURDAY) {
		System.out.println();  
	}

虽然是小功能,也要把它封装起来,不能一堆写在main方法里面。

//首先,创建一个静态的方法,方便调用:
//有两个参数,source传字符串类型的日历,pattern传字符串类型的日历格式
 static void showcalender(String source,String pattern) throws ParseException{
//实例化日历格式
SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);
//使用Date获取传入的字符串格式的时间后,实例化Calendar,设置时间
//在转换格式时,需要抛出ParseException异常	
Date date=dateFormat.parse(source);
	Calendar calendar=new GregorianCalendar();
calendar.setTime(date);
//紧接着就是之前所述的两个问题所在位置:
//首先保存今天,然后获取每月的第一天的星期数
int today=calendar.get(Calendar.DATE);
	calendar.set(Calendar.DATE, 1);
int todayweek=calendar.get(Calendar.DAY_OF_WEEK);
//最后就是获取每月的最后一天
int lastday=calendar.getActualMaximum(Calendar.DATE);
//到这里,准备工作就全部做完了,最后就是输出了;
//输出日一二三四五六
System.out.println("日\t一\t二\t三\t四\t五\t六");
//输出,每个月前面需要空出多少的空格\t,星期天为0,星期一为1,以此类推
for (int i = 1; i < todayweek; i++) {
		System.out.print("\t");
}
//从1开始,循环每个月最后一天的天数
for (int i = 1; i <= lastday; i++) {
//在前面保存今天的天数,若等于循环到的次数,则加个*号	
		if (i==today) {
			System.out.print("*"+i+"\t");
}//否则正常输出天数
		else {
			System.out.print(i+"\t");
		}
//最后一个小问题,就是获取循环每一天的星期数,遇到星期六就换行。
		int setweek=calendar.get(Calendar.DAY_OF_WEEK);
		if (setweek==Calendar.SATURDAY) {
			System.out.println();
		}
		calendar.add(Calendar.DATE, 1);//从1号开始循环,循环一次加1一天
}
}

最后就是在,main方法里面使用该方法,这里的方法需要抛出异常,若不想抛出异常,可以自己在showcalender方法里使用try catch解决异常
在main方法使用方法:

showcalender("2019-4-22", "yyyy-MM-dd");

猜你喜欢

转载自blog.csdn.net/qq_41657790/article/details/89465737
今日推荐