做一个简单的日历格式

需求:

做一个简单的日历,输入日期(格式2018-1-1)然后得到该年的月份的日历信息:

 

思考过程:

  1. 格式处理(如何得到日  一  二  三  四  五  六)这样的日期格式?
  2. 如何判断当前月份的1号所在的星期几?
  3. 当前月份的最大天数?
  4. 如何进行让他们在星期六自动换行?

代码:

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);

}

}

 

}

 

 

修改后的代码:

public void formatDateShow( Calendar calendar ){

if( calendar == null ){

return ;

}

System.out.println("日\t一\t二\t三\t四\t五\t六\t");

//当前日期是几号

int currentDay = calendar.get(Calendar.DAY_OF_MONTH);

// 当月的最大天数

int monthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

//当月第一天是星期几

calendar.set(Calendar.DATE, 1);

int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

//第一行的格式数据

StringBuilder dateStr = new StringBuilder();

 

/*

for( int i=1 ; i<firstDayOfWeek ; i++ ){

dateStr.append(" \t");

}

*/

for( int i=1 ; i<firstDayOfWeek ; i++ ){

System.out.print(" \t");

}

    for( int i=1 ; i<=monthMaxDay ; i++ ){

     /*

      * 以前的代码

     //当所在日期为星期六后,打印输出

      *

     if( i == currentDay ){

     dateStr.append("*");

     }

    

     if( firstDayOfWeek % 7 == 0){

     dateStr.append(i).append("\t");

     System.out.println(dateStr);

     firstDayOfWeek = 1;

     dateStr.delete(0, dateStr.length());

     }else{

    

     dateStr.append(i).append("\t");

     firstDayOfWeek += 1;

     }

     */

    

     if( i == currentDay ){

     System.out.print("*");

     }

     System.out.print(i+"\t");

     //判断是否是星期六,如果是换行

     if( calendar.get(Calendar.DAY_OF_WEEK) % 7 == 0){

     System.out.println("");

     }

     //当前日期加1天

     calendar.add(Calendar.DATE, 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]);

int day = Integer.parseInt(strDates[2]);

if( year <1970){

System.out.println("年份,输入的日期不合法");

return null;

}

if( month >12 || month < 0 ){

System.out.println("月份,输入的日期不合法");

return null;

}

if( day < 0 || day>31 ){

System.out.println("日期,输入的日期不合法");

}

Calendar calendar = new GregorianCalendar(year, month-1 ,day);   //2018

return calendar;

}

 

public String getConsoleInfo(){

System.out.print("write info:");

Scanner sc = new Scanner(System.in);

return sc.nextLine();

}

 

//重新编写一个日历,上面的问题太大了

public void calendarShow(){

 

}

 

@Test

public void show(){

//循环输入 ,输入格式日期(yyyy-MM-dd)继续,如果输入n,那么将退出程序

boolean flag = true;

while( flag ){

String date = getConsoleInfo();

if( date.equalsIgnoreCase("n") ){

flag = false;

System.out.println("测试结束.....!");

System.exit(0);

}

Calendar calendar = getCalendarDate(date);

formatDateShow(calendar);

}

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值