当前位置:   article > 正文

java万年历的两种实现方式

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();
			}
		}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

第二种方法:借助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();
			}
		}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1017226
推荐阅读
相关标签
  

闽ICP备14008679号