需求:
做一个简单的日历,输入日期(格式2018-1-1)然后得到该年的月份的日历信息:
|
思考过程:
- 格式处理(如何得到日 一 二 三 四 五 六)这样的日期格式?
- 如何判断当前月份的1号所在的星期几?
- 当前月份的最大天数?
- 如何进行让他们在星期六自动换行?
代码:
public void formatDateShow( Calendar calendar ){ if( calendar == null ){ return ; } System.out.println("日\t一\t二\t三\t四\t五\t六\t"); //当月第一天是星期几 int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); //星期3 == 4 //获取当月的最大天数 int[] months = {31,28,31,30,31,30,31,31,30,31,30,31}; if( calendar.get(Calendar.YEAR) %4 == 0){ months[1] = 29; } // 当月的最大天数 int monthMaxDay = months[calendar.get(Calendar.MONTH)]; //第一行的格式数据 String dateStr = ""; for( int i=0 ; i<firstDayOfWeek-1 ; i++ ){ dateStr+=" \t"; } for( int i=1 ; i<=monthMaxDay ; i++ ){ //当所在日期为星期六后,打印输出 if( firstDayOfWeek % 7 == 0){ dateStr += i; dateStr += "\t"; System.out.println(dateStr); firstDayOfWeek = 1; dateStr = ""; }else{ dateStr += i; dateStr += "\t"; firstDayOfWeek += 1; }
} System.out.println(dateStr); }
//用于输入一个日期,获取一个Calendar对象 格式为2018-8-1 public Calendar getCalendarDate(String date){ String[] strDates = date.split("-"); int year = Integer.parseInt(strDates[0]); int month = Integer.parseInt(strDates[1]); if( year <1970){ System.out.println("年份,输入的日期不合法"); return null; } if( month >12 || month < 0 ){ System.out.println("月份,输入的日期不合法"); return null; } Calendar calendar = new GregorianCalendar(year, month-1 ,1); //2018 return calendar; }
public String getConsoleInfo(){ System.out.print("write info:"); Scanner sc = new Scanner(System.in); return sc.nextLine(); }
@Test public void show(){ //循环输入 ,输入格式日期(yyyy-MM-dd)继续,如果输入n,那么将退出程序 boolean flag = true; while( flag ){ String date = getConsoleInfo(); Calendar calendar = getCalendarDate(date); formatDateShow(calendar); if( date.equalsIgnoreCase("n") ){ flag = false; System.exit(0); } }
}
修改后的代码:
|