简易可视化日历程序(控制台)

/ java精彩编程200例 / 没有评论 / 96浏览
今天通过看教程自己完成了这个代码,算是一点小小的进步吧。
这个代码实现的就是输入一个日期,然后输出你所输入日期所在月的日历表,并且将所输入日期这一天用*标记。
主要用的Calendar类,Date类,原理是用Calendar得到所输入的日期,将日期所在月份循环输出,具体实现细节请看下方代码。
package 常用类;
/**
 * 简易可视化日历程序
 * 
 * 
 */
import java.io.ObjectInputStream.GetField;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import javax.print.DocFlavor.STRING;

public final class TestCalendar {
     public static void main(String[] args) throws ParseException {
        System.out.println("请输入日期(格式为:1998-9-24)");
        Scanner scanner = new Scanner(System.in);//创建Scanner对象用于从键盘输入
        String dateString = scanner.nextLine();//获得日期

        //将输入的字符串转化为日期类
        System.out.println("您刚刚输入的日期是:"+ dateString);
        //将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
        String[] str = dateString.split("-");
        int year = Integer.parseInt(str[0]);//分割出的三部分分别存入
        //注意:这里的月1-12   在Calendar里为0-11 
        int month = Integer.parseInt(str[1]);
        int day =  Integer.parseInt(str[2]);
        Calendar c = new GregorianCalendar(year,month-1,day);// Month:0-11

        //另一种方式:将字符串通过SImpleDateFormat转化成Date对象,
        //再将Date对象转化成日期类
        // SimpleDateFormat sdfDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // Date date = sdfDateFormat.parse(dateString);
        // Calendar c = new GregorianCalendar();
        // c.setTime(date);
        // int day = c.get(Calendar.DATE);

        int day1 = c.get(Calendar.DAY_OF_MONTH);//将初始日期记录下来,方便最后*标记
        //将本月最大天数提前记录写来,防止循环导致下月的一号被显示的情况
        int maxDay = c.getActualMaximum(Calendar.DATE);
        System.out.println("日\t一\t二\t三\t四\t五\t六");//顶部样式

        //提前建立一个1号,并用for循环将本月1号之前不需显示的置为空格
        c.set(Calendar.DAY_OF_MONTH, 1);
        for(int i=0;i<c.get(Calendar.DAY_OF_WEEK)-1;i++){// week:1-7 日一二三四五六
            System.out.print("\t");
        }

        //循环输出整个月
        for(int i=1;i<=maxDay;i++){
            if(day1 == c.get(Calendar.DAY_OF_MONTH)){//循环到所输入日期,即用*标记
                System.out.print(c.get(Calendar.DAY_OF_MONTH)+"*\t");
            }else{
                System.out.print(c.get(Calendar.DAY_OF_MONTH)+"\t");
            }
            if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){//当到周六时,换行
                System.out.println();
            }
            c.add(Calendar.DAY_OF_MONTH, 1);//每次循环c的日期加1号,直至本月末
        }    
    }

以下是代码实现情况:

说真的,这么简单一个功能就让我有点迷了,可别说别的了,所以啊,路还长着呢,加油共勉!