JAVA在控制台输出万年历二(Calendar版)

简述

紧接上一版纯手写计算日历是不是有点小麻烦?
JAVA在控制台输出万年历一(1900年起)
这次咱们直接用java的Calendar(日历工具类)可以非常方便快速的输出万年历。

效果

JAVA在控制台输出万年历二(Calendar版)_第1张图片

思路

思路与上一版一样,参考上一版JAVA在控制台输出万年历一(1900年起)。
之前我们通过遍历指定年份到1900年间的年份通过判断闰年然后累加天数,最后加上月份天数然后除以7取余来判断当前月第一天的星期数,从而获取当月的日历。
不难发现,代码麻烦的地方就是获取指定年月日的那一个月的第一天是星期几,只要获取到后,其余的遍历输出即可。

Calendar类

Calendar日历类功能强大,用来替代 Date,内部封装了非常多的静态方法和变量用于日期时间的获取。

  • 创建日历类对象
Calendar cal = Calendar.getInstance(); //获取Calendar对象
  • 通过Date设置日历类对象
 calendar.setTime(new Date());
  • 获取日历中各个属性
   //获取日历中各个属性
    System.out.println(cal.get(Calendar.YEAR));//输出年份
    System.out.println(cal.get(Calendar.MONTH));//输出月份  0-11
    System.out.println(cal.get(Calendar.DATE));//输出天数
    System.out.println(cal.get(Calendar.DAY_OF_WEEK));//输出一个星期第第几天 3   日1 二3
    System.out.println(Calendar.SATURDAY); //输出预定义的星期六是7     星期天是1   1-7
  • 修改日历中的各个属性
cal.set(Calendar.MONTH, 1); //设置月份为这一年的第一个月
cal.set(Calendar.DATE,1); //设置日期为当月的第一天

这里只介绍了一部分用到的方法,推荐去看一下API

实现

  • 1.按照格式输入日期
  • 2.通过SimpleDateFormat将格式化的日期转换为Date对象
  • 3.通过Date对象设置Calendar对象,然后设置天数为当月第一天
  • 4.打印日历头(星期一 星期二…),然后循环遍历打印每一天
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Calendar calendar = Calendar.getInstance();
    System.out.println("请按照yyyy-MM-dd的格式输入您需要查询日历的日期(例如2020-7-1):");
    String dateStr = sc.nextLine();
    DateFormat ds = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;
    try {
        date = ds.parse(dateStr);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    calendar.setTime(date);

    //当月的第几天
    int day = calendar.get(Calendar.DATE);
    int days = calendar.getMaximum(Calendar.DATE);//算出这个月有多少天
    calendar.set(Calendar.DATE,1); // 设置为当月第一天,看这一天是星期几
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//获取该月第一天是星期几     
    System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期天");
    //输出第一天之前的制表符
    if(dayOfWeek>1) {
        for (int i = 1; i < dayOfWeek-1; i++) {
            System.out.print("\t");
        }
    }else {
        for (int i = 1; i < dayOfWeek+5; i++) {
            System.out.print("\t");
        }
    }
    //输出日历
    for (int i = 1; i <= days; i++) {
        calendar.set(Calendar.DATE,i);
        if(i==day) {
            System.out.print("*");
        }
        //如果是星期天就换行输出
        if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
            System.out.println(i);
        }else {
            System.out.print(i+"\t");
        }
    }
}

你可能感兴趣的:(java)