使用两种不同的方式实现万年历功能

1、使用公式的方式实现万年历功能

/**
 * 日历工具类,使用公式计算的方式实现
 * @author hzy
 *
 */
public class CalendarUtil {
	
	/**
	 * 计算当前月份的天数
	 * @param year
	 * @param month
	 * @return
	 */
	public static int getMonthDays(int year,int month){
		int days = 0;
		switch (month) {
			case 4:
			case 6:
			case 9:	
			case 11:	
				days = 30;
				break;
			case 1:
			case 3:
			case 5:	
			case 7:
			case 8:
			case 10:
			case 12:	
				days = 31;
				break;
			case 2:
				if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
					days = 29;
				} else {
					days = 28;
				}
				break;	
			default:
				System.out.println("请您输入1-12的月份!");
				break;
		}
		
		return days;
	}
	
	/**
	 * 计算指定日期是这一年的第几天
	 * @param year
	 * @param month
	 * @param day
	 * @return
	 */
	public static int getYearDays(int year,int month,int day){
		//定义变量
		int days = 0;
		//循环计算天数
		for (int i = 1; i < month; i++) {
			days += getMonthDays(year, i);
		}
		days += day;
		
		return days;
	}
	
	/**
	 * 计算指定日期是星期几
	 * @param year
	 * @param month
	 * @param day
	 * @return
	 */
	public static int getWeek(int year,int month,int day){
		//调用getYearDays方法得到是一年的第几天
		int days = getYearDays(year, month, day);
		//使用公式计算星期几
		int week = (year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
		
		return week;
	}
		
	
	/**
	 * 格式化输出日期
	 * @param year
	 * @param month
	 * @return
	 */
	public static void dateFormat(int year,int month){
		//定义一个计数变量
		int count = 0;
		System.out.println("<<<<<<<<<<<<<<<  万年历    >>>>>>>>>>>>>>>");
		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		System.out.println();
		//获取这个月的第一天是星期几
		int week = getWeek(year, month, 1);
		
		//打印空白
		for (int i = 0; i < week; i++) {
			count ++;
			System.out.print("\t");
		}
		
		//获取这个月的天数
		int monthDays = getMonthDays(year, month);
		//循环打印每一天
		for (int i = 1; i <= monthDays; i++) {
			count ++;
			System.out.print(i + "\t");
			//计数等于7的时候换行
			if (count % 7 == 0) {
				System.out.println();
				System.out.println();
			}
		}
		System.out.println();
		
	}
	
}

2、使用Calendar类实现万年历功能

/**
 * 日历工具类,使用Calendar类实现
 * @author Hzy
 *
 */
public class CalendarUtilOne {
	/**
	 * 显示日历的方法
	 */
	public static void showCalendar() {
		//创建scanner对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年份:");
		//获取输入的年份
		int year = sc.nextInt();//年份
		System.out.println("请输入月份:");
		//获取输入的月份
		int month = sc.nextInt();//月份
		
		//创建日历对象
		Calendar cd = Calendar.getInstance();
		//设置日历对象的年,月,日
		cd.set(Calendar.YEAR, year);
		cd.set(Calendar.MONTH, month-1);
		cd.set(Calendar.DATE, 1);
		//获得当前月份的最大值
		int monthDays = cd.getActualMaximum(Calendar.DATE);
		//得到本月的第一天是星期几
		int week = cd.get(Calendar.DAY_OF_WEEK);
		
		int count = 0;//定义一个计数变量
		System.out.println("<<<<<<<<<<<<<万年小日历>>>>>>>>>>>>>>");
		System.out.println("\n\t\t" + year + " 年  " + month + " 月 \n");
		//打印日历的星期
		String[] weekStr = {"日\t","一\t","二\t","三\t","四\t","五\t","六\t"};
		for (int i = 0; i < weekStr.length; i++) {
			System.out.print(weekStr[i]);
		}
		
		System.out.println("\n");
		//打印空白
		for (int i = 0; i < week-1; i++) {
			System.out.print("\t");
			count++;
		}
		//打印日历
		for (int i = 1; i <= monthDays; i++) {
			count++;
			System.out.print(i+"\t");
			if (count % 7 == 0) {
				System.out.println();
			}
		}
		
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值