用Calendar实现万年历

核心方法

//西方日历
//当天日期若为所在周的周日,则默认按西方日历为本周的第一天
//西方日历 周日 第一天 ----- 周六 第七天
//东方日历 周一 第一天 ----- 周日 第七天
//故对 dayOfWeek == 0 这天特殊处理下就好
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
//获取当月天数
maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

实现代码

/**
 * 输入年份打印每年日历
 * Calendar实现
 * 
 * */
public class A_YearCalendarOfCarlendar {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		//年份
		int year;
		//月份
		int month;
		//每月天数
		int maxDay;
		//每月第一号在当周第几天
		int dayOfWeek;
		
		//初始化日历
		Calendar cal = Calendar.getInstance();
		
		System.out.println("请输入所要查询的年份日历:");
		year = input.nextInt();
		
		cal.set(Calendar.YEAR, year);
		for (int i = 0; i <= 11; i++) {
			month = i;
			//设置月份(Calendar 的月份从 0 开始计数)
			cal.set(Calendar.MONTH, month);
			//设置每月日期(几号)
			cal.set(Calendar.DATE, 1);
			
			//西方日历
			//当天日期若为所在周的周日,则默认按西方日历为本周的第一天
			//西方日历 周日 第一天 ----- 周六 第七天
			//东方日历 周一 第一天 ----- 周日 第七天
			//故对 dayOfWeek == 0 这天特殊处理下就好
			dayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
			//获取当月天数
			maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
			monthCalendar(year,month + 1,dayOfWeek,maxDay);
		}
		
	}
	
	//打印每月日历
	public static void monthCalendar(int year,int month,int dayOfWeek,int maxDay) {
		int day = 1;
		System.out.println(year + " 年 " + month + " 月");
		System.out.println("====================================================");
		System.out.print("一\t二\t三\t四\t五\t六\t日\n");
		
		if (dayOfWeek == 0) 
			dayOfWeek = 7;
		//每月日历首行打印
		//空白打印
		for (int i = 0; i < dayOfWeek - 1; i++) 
			System.out.print("\t");
		//日期打印
		for (int i = 0; i < 7 - (dayOfWeek - 1); i++) 
			System.out.print(day++ + "\t");
		System.out.println();
		
		//每月日历其他行打印
		int j = 1;
		while (true) {
			//换行 每行打印7个数字
			if (j % 8 == 0) {
				j = 1;
				System.out.println();
			}
			if (day == maxDay) {
				System.out.println(day + "\t");
				System.out.println();
				break;
			} else {
				System.out.print(day++ + "\t");
			}
			j++;
		}
		
	}

}
/**
 * 输入年份打印每年日历
 * LocalDate实现
 * 
 * */
public class A_YearCalendarOfLocalDate {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		//年份
		int year;
		//月份
		int month;
		//每月天数
		int maxDay;
		//每月第一号在当周第几天
		int dayOfWeek;
		
		//本地日期
		LocalDate ld;
		
		System.out.println("请输入所要查询的年份日历:");
		year = input.nextInt();
		
		for (int i = 1; i <= 12; i++) {
			month = i;
			//设置月份(LocalDate 的月份从 1 开始计数)
			ld = LocalDate.of(year, month, 1);
			
			//本地日期 周一 第一天 ----- 周日 第七天
			dayOfWeek = ld.getDayOfWeek().getValue();
			//获取当月天数
			maxDay = ld.lengthOfMonth();
			
//			System.out.println(ld);
//			System.out.println("year is:" + year);
//			System.out.println("month is:" + month);
//			System.out.println("dayOfWeek is:" + dayOfWeek);
//			System.out.println("maxDay is:" + maxDay);
			monthCalendar(year,month,dayOfWeek,maxDay);
		}
		
	}
	
	//打印每月日历
	public static void monthCalendar(int year,int month,int dayOfWeek,int maxDay) {
		int day = 1;
		System.out.println(year + " 年 " + month + " 月");
		System.out.println("====================================================");
		System.out.print("一\t二\t三\t四\t五\t六\t日\n");
		
		//每月日历首行打印
		//空白打印
		for (int i = 0; i < dayOfWeek - 1; i++) 
			System.out.print("\t");
		//日期打印
		for (int i = 0; i < 7 - (dayOfWeek - 1); i++) 
			System.out.print(day++ + "\t");
		System.out.println();
		
		//每月日历其他行打印
		int j = 1;
		while (true) {
			//换行 每行打印7个数字
			if (j % 8 == 0) {
				j = 1;
				System.out.println();
			}
			if (day == maxDay) {
				System.out.println(day + "\t");
				System.out.println();
				break;
			} else {
				System.out.print(day++ + "\t");
			}
			j++;
		}
		
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值