动态日历简易算法实现
一、动态日历算法实现
给定指定年份以及月份来显示出相对应的日历表。
二、具体实现
算法实现待解决的问题
1.需要知道给定月份的天数
2.需要知道月份的第一天为本月的星期几,来获取日历空格数。
我们可以利用JDK内置的java.util.Calendar类来实现以上需要解决的问题
首先将时间设置为当前时间
//获取一个Calendar实例
Calendar c = Calendar.getInstance();
//设置年份为当前年份
c.set(Calendar.YEAR, year);
//设置月份为当前月份
c.set(Calendar.MONTH, month - 1);
其次再将当前的日期设置成本月的第一天,再获取当前月份第一天是星期几
c.set(Calendar.DAY_OF_MONTH, 1);
//获取当天星期几
int weekDay = c.get(Calendar.DAY_OF_WEEK) - 1;
//判断星期天
if(weekDay == 0) {
weekDay = 7;
}
最后就是获取本月的总天数并循环打印日历
//获取当前月份具备的最大值(当月总天数)
int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("-----------------------"+year+"年"+month+"月"+"------------------");
System.out.println("一\t二\t三\t四\t五\t六\t日");
System.out.println("--------------------------------------------------");
//声明一个计数器,统计是否到达7
int count = 0;
//打印输出\t
for (int i = 1; i < weekDay; i++) {
System.out.print("\t");
count ++;
}
//打印天数
for (int i = 1; i <= days; i++) {
if(count == 7) {
System.out.println();
count = 0;
}
System.out.print(i+"\t");
count ++;
}
三、整体代码
public class MyCalendar {
private int year;
private int month;
public MyCalendar(int year, int month) {
super();
this.year = year;
this.month = month;
}
public void showCalender() {
//获取一个Calendar实例
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
//将日期设置为当月的第一天
c.set(Calendar.DAY_OF_MONTH, 1);
//获取当天星期几
int weekDay = c.get(Calendar.DAY_OF_WEEK) - 1;
if(weekDay == 0) {
weekDay = 7;
}
//获取当前月份具备的最大值(当月总天数)
int days = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("-----------------------"+year+"年"+month+"月"+"------------------");
System.out.println("一\t二\t三\t四\t五\t六\t日");
System.out.println("--------------------------------------------------");
//声明一个计数器,统计是否到达7
int count = 0;
//打印输出\t
for (int i = 1; i < weekDay; i++) {
System.out.print("\t");
count ++;
}
//打印天数
for (int i = 1; i <= days; i++) {
if(count == 7) {
System.out.println();
count = 0;
}
System.out.print(i+"\t");
count ++;
}
}
public static void main(String[] args) {
new MyCalendar(2020, 6).showCalender();
}
}
运行效果