制作动态日历的方法
1.通过Calendar类来制作动态的日历
public class CalendarDemo {
public static void getCalendar(int year,int month) {
Calendar cal=Calendar.getInstance();
//设置年份和月份,以及将日期改为一个月的1号
cal.set(year, month-1, 1);
//获得空格数
int spacecount=(cal.get(Calendar.DAY_OF_WEEK)+5)%7;
//获取设置该月的总天数
int totalDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("********************【"+year+"】年【"+month+"】月******************");
System.out.println("一\t二\t三\t四\t五\t六\t日");
//打印空格
for (int i = 0; i < spacecount; i++) {
System.out.print("\t");
}
//打印日历
for (int i = 1; i <= totalDay; i++) {
System.out.print(i+"\t");
//每7个数换一行
if ((i+spacecount)%7==0) {
System.out.println();
}
}
}
public static void main(String[] args) {
for (int i = 1; i <= 12; i++) {
getCalendar(2018, i);
System.out.println();
}
}
}
2.通过算法的思想来制作动态日历
public class CalendarDemo2 {
/**
* 判断是闰年还是平年
* @param year
* @return
*/
public boolean isLeapYear(int year) {
if ((year%4==0&&year%100!=0)||year%400==0) {
return true;
}
return false;
}
/**
* 获取一年的总天数
* @param year
* @return
*/
public int getDayOfYear(int year) {
return isLeapYear(year)?366:365;
}
/**
* 获取一个月的总天数
* @param year
* @param month
* @return
*/
public int getDayOfMonth(int year,int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return isLeapYear(year)?29:28;
}
}
/**
* 获取从1990年到所给的年份的天数
* @param year
* @param month
* @return
*/
public int getDayOfTotal(int year,int month) {
int dayOftotal=0;
for (int i = 1900; i < year; i++) {
dayOftotal+=getDayOfYear(i);
}
for (int i = 1; i < month; i++) {
dayOftotal+=getDayOfMonth(2018, i);
}
return dayOftotal;
}
/**
* 获取空格数
* @return
*/
public int spaceCount(int year,int month) {
return getDayOfTotal(year, month)%7;
}
public void print(int year,int month) {
//计数器,统计一行中有多少个数
int count=0;
System.out.println("********************【"+year+"】年【"+month+"】月******************");
System.out.println("一\t二\t三\t四\t五\t六\t日");
//打印空格
for (int i = 0; i < spaceCount(year, month); i++) {
System.out.print("\t");
count++;
}
//打印日历
for (int i = 1; i <= getDayOfMonth(year, month); i++) {
System.out.print(i+"\t");
count++;
//当一行有7个数就换行
if (count%7==0) {
System.out.println();
}
}
}
public static void main(String[] args) {
CalendarDemo2 s=new CalendarDemo2();
for (int i = 1; i <= 12; i++) {
s.print(2018, i);
System.out.println();
}
}
}