这个案例综合性强,可以巩固Date类,SimpleDateFormat类,Calendar类,大家可以试着练习。
package cn.tedu.demo04;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
*
* @author 张炳秦
* 控制台打印可视化日历
*
*/
public class Demo08 {
public static void main(String[] args) throws Exception{
System.out.println("请输入一个日期,格式为yyyy-MM-dd");
Scanner input = new Scanner(System.in);
String strDate = input.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//将输入的字符串解析为日期
Date currentDate = sdf.parse(strDate);
//创建一个日历类对象
Calendar calendar = Calendar.getInstance();
//将当前的时间设置到日历中
calendar.setTime(currentDate);
//获取输入的日期是这个月的几号
int day = calendar.get(Calendar.DAY_OF_MONTH);
//获取这个月的天数
int maxday = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//将日期置为这个月的一号
calendar.set(Calendar.DAY_OF_MONTH, 1);
//获取一号是星期几,因为在打日历时1号前面可能会有空格
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
char[] ch = {'一', '二', '三', '四', '五', '六', '天'};
//首先打印出周一到周日
for (char c : ch) {
System.out.print(c+"\t");
}
//打印完后记得做换行处理
System.out.println();
//打印出一号前面的空格
for (int i = 1; i <= weekday - 2; i++) {
System.out.print("\t");
}
//打印日期
for (int i = 1; i <= maxday; i++) {
if (calendar.get(Calendar.DAY_OF_MONTH) == day) {
System.out.print(day+"❤"+"\t");
}else {
System.out.print(calendar.get(Calendar.DAY_OF_MONTH)+"\t");
}
//遇到星期天要换行处理
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
System.out.println();
}
//将日期加一
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
}
}