动态日历的制作

制作动态日历的方法

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();
		}	
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42290832/article/details/81148886
今日推荐