赞
踩
第一种 硬写(思路:找某一年的一月一日做参考,计算输入的日期到参考日期,间隔的天数,计算输入日期的一号是周几)
// 准备数据 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(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。