package 控制台日历Zing;
import java.util.Calendar;
/**
* 写控制台日历简单模板
*
* @author Administrator
*
*/
public class 控制台日历ZingW1 {
public static void main(String[] args) {
// 属性:固定年,月初始属性,方便测试
int year = 2022;
int month = 5;
// 定义数组来存储整个月份的数字
int[] dateNums = new int[42];
// 定义数组下标
int Index = 0;
// 打印星期栏
System.out.println("一\t二\t三\t四\t五\t六\t日");
// 运用Calendar时间操作,获取日期对象,得到当前月份1号是周几
Calendar c = Calendar.getInstance();
// 设定获取日期,获取1号是周几
c.set(year, month - 1, 1);// 月份必须减一:月份数组里月份存储为0~11
int week = c.get(Calendar.DAY_OF_WEEK) - 1;// 必须减一:周日为1,周六为7
// System.out.println("week:" + week);// 打印判断
// 上月日期先 打印空格**,便于后续获取月最大数打印天数
// 这里有个问题,当月份为五月份时,week = 1 - 1=0,星期日为1号
// 因此做一次中式判断,给周日赋予7
week = (week == 0) ? 7 : week;
// 获取上个月份最大天数信息
Calendar c1 = Calendar.getInstance();
c1.set(year, month - 1, 1);
c1.add(Calendar.MONTH, -1);
int lastDate = c1.getActualMaximum(Calendar.DAY_OF_MONTH);
// System.out.println("last:" + lastDate);
int day = lastDate - week + 2;
for (int i = 1; i < week; i++) {// 小于空数
dateNums[Index++] = day++;// 自己累加
// System.out.print(i + "\t");
}
// 打印本月的天数
int nowDate = c.getActualMaximum(Calendar.DAY_OF_MONTH);
// System.out.println("nowDate:" + nowDate);
for (int i = 1; i <= nowDate; i++) {
dateNums[Index++] = i;
// 发现打印的数字并不会换行
// System.out.print(i + "\t");
// if ((i + week - 1) % 7 == 0) {
// System.out.println();
// }
}
// 获取下个月的信息,下个月天数等于数组长度减去已经储存的数
int nextDate = dateNums.length - Index;
for (int i = 1; i <= nextDate; i++) {
dateNums[Index++] = i;
}
for (int i = 0; i < dateNums.length; i++) {// i要从0开始因为是数组
System.out.print(dateNums[i] + "\t");
if ((i + 1) % 7 == 0) {// 数组从0开始
System.out.println();
}
}
}
}