java万年历的两种实现方式

第一种 硬写(思路:找某一年的一月一日做参考,计算输入的日期到参考日期,间隔的天数,计算输入日期的一号是周几)

// 准备数据
		System.out.println("**********欢 迎 使 用 万 年 历***********");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = scanner.nextInt();
		if (year < 0) {
			System.out.println("年份错误!");
			return;
		}
		System.out.println("请输入月份:");
		int month = scanner.nextInt();
		if (month > 12 || month < 1) {
			System.out.println("月份错误!");
			return;
		}
		int day = 30;// 当月的天数
		int day_num = 0;// 从2001年1月到当前月的天数
		int yearTest = 2001;// 2001年
		int weekTest = 1;// 2001年1月1日周一
		int week = 0;// 当前月1号是周几
		// 处理数据
		// 年份大于2001年
		if (year >= yearTest) {
			int year_1 = year - yearTest;// 2001年到今年多少年
			day_num = year_1 * 365 + year_1 / 4 - year_1 / 100 + year_1 / 400;
			// 判断当前月1号离今年1月1号有多少天
			for (int i = 1; i <= month; i++) {
				if ((i % 2 != 0 && i <= 7) || (i % 2 == 0 && i >= 8)) {
					if (i != month)//不算当前月份
						day_num += 31;
					else
						day = 31;
				} else if (i == 2) {
					if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
						if (i != month)
							day_num += 29;
						else
							day = 29;
					} else {
						if (i != month)
							day_num += 28;
						else
							day = 28;
					}
				} else {
					if (i != month)
						day_num += 30;
					else
						day = 30;
				}
			}
			week = (day_num + weekTest) % 7;// 当前月1号是周几
		} else {
			// 年份小于2001
			int year_1 = yearTest - year - 1;// 2001年到今年多少年
			day_num = year_1 * 365 + year_1 / 4 - year_1 / 100 + year_1 / 400;
			if (year_1 % 4 != 0) {
				// 闰年年数=year_1/4向上取整(2000年是闰年)
				day_num++;
			}

			// 判断当前月1号离今年1月1号有多少天
			for (int i = 12; i >= month; i--) {
				if ((i % 2 != 0 && i <= 7) || (i % 2 == 0 && i >= 8)) {
					day_num += 31;//当i==month的时候也要加,即算上当前月
					day = 31;
				} else if (i == 2) {
					if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
						day_num += 29;
						day = 29;
					} else {
						day_num += 28;
						day = 28;
					}
				} else {
					day_num += 30;
					day = 30;
				}
			}
			// 星期从周天往前数
			week = (weekTest + 7 - (day_num % 7)) % 7;
		}
		// 输出数据

		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
		for (int i = 0, j = 1; j <= day; i++) {
			if (i < week) {
				System.out.print("\t");
			} else {
				System.out.print(j++ + "\t");
			}
			if (i % 7 == 6) {
				System.out.println();
			}
		}

第二种方法:借助java.Calendar类,思路不变

System.out.println("请输入日期(例如:2021-06-01):");
		Scanner scan = new Scanner(System.in);
		Date date = new Date();
		Calendar cal = Calendar.getInstance();

		try {
			// 设置日期字符串格式
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			date = sdf.parse(scan.next());
		} catch (ParseException e) {
			System.out.println("输入日期格式有误!");
			System.out.println("再皮腿给你打折!!!");
			return;
		}

		cal.setTime(date);// 将日期设置成日历

		int day = cal.get(Calendar.DAY_OF_MONTH);// 取出今天是几号

		cal.set(Calendar.DAY_OF_MONTH, 1);// 将日期设置为每月的1号,方便计算每月1一号是周几

		System.out.println("日\t一\t二\t三\t四\t五\t六\t");
		for (int i = 1, j = 1; i <= cal.getActualMaximum(Calendar.DAY_OF_MONTH); j++) {
			// i控制输出每月的几号
			// j控制每周换行以及正式打印号数之前的空格
			// cal.getActualMaximum(Calendar.DAY_OF_MONTH)当前月有多少天
			if (j >= cal.get(Calendar.DAY_OF_WEEK)) {
				// 当前月一号是周几cal.get(Calendar.DAY_OF_WEEK)
				
				if (i == day) {
					// 标记当天
					System.out.print("*" + i + "\t");
				} else {
					System.out.print(i + "\t");
				}
				i++;
				
			} else {
				// 打印空格
				System.out.print("\t");
			}
			
			// 控制每周换行
			if (j % 7 == 0) {
				System.out.println();
			}
		}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值