Java 利用Calender类制作日历,并且标注日期

#Java 利用Calender类制作日历,并且标注日期

1.题目需求

在这里插入图片描述
*需要注意的是,我们需要在指定日期后面加上一个“*”。

2. Calender类

在这里插入图片描述
java中自带了java.uitl.Date类,但是在JDK1.1之后,大量被Calender所取代,所以这里我们选择Calender类,其中给我们提供了很好的方法供我们使用。

我们这里利用Calender类实现日历功能。

java.uiti 类 Calender
java.lang.Object
  java.util.Calendar
public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

####我们该需求中**需要将Stirng类型的日期,变为Calender类型。**

方法如下:

Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要查看的日期:(提示:请按照格式例如2019-3-7)");
String date = sc.next();
//2.获得日历对象
Calendar cal = new GregorianCalendar();//Calendar类是抽象类,所以这里使用Calendar的子类GregorianCalendar
java.sql.Date d = java.sql.Date.valueOf(date);//读入输入的日期
cal.setTime(d);//设置好Calender对象

Calendar类是抽象类,所以这里使用Calendar的子类GregorianCalendar

后续会用到这个类中的一些方法,将在后续代码中讲解。

在这里插入图片描述

3. 代码思路

1.从控制台获取一个日期。如2022-10-30
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要查看的日期:(提示:请按照格式例如2019-3-7)");
String date = sc.next();
2.获得日历对象
Calendar cal = new GregorianCalendar();//Calendar类是抽象类,所以这里使用Calendar的子类GregorianCalendar
java.sql.Date d = java.sql.Date.valueOf(date);//读入输入的日期
cal.setTime(d);//设置好Calender对象

Calendar类是抽象类,所以这里使用Calendar的子类GregorianCalendar

3. 获取需要的信息

制作一个日历,我们接下来需要几个信息。
【1】. 本月的最大天数

int maxDay = cal.getActualMaximum(Calendar.DATE);

​ 【2】.本月第一天是第一行第几个

第一天从那一天开始,第一天之前的部分,全部输出为空格。

所以我们这里需要动一下脑筋,于是我想到了==把日期修改为第一天的日期(如输入日期为2022-9-21,则我们将其修改为2022-9-1)。==

cal.set(Calendar.DATE, 1);//设置日期为当月第一天

然后通过Calender自带的方法,得到第一天的位置

int num = cal.get(Calendar.DAY_OF_WEEK);//获取到第一天所在列数

(注:不过在此之前,需要将输入的日期所在号数存下来,为后续添加“*”做准备)

int nowDay = cal.get(Calendar.DATE);//保留目前的日期,为后续添加"*"做准备
4. 输出日历
4.1 输入日历表头
System.out.println("---------------------------");
System.out.println("日\t一\t二\t三\t四\t五\t六");
System.out.println("---------------------------");
4.2 日历内容输出
  1. 先设置一个换行的计数器

    int count = 0;
    
    
  2. 输出空格部分

    for (int i = 1; i <= num - 1; i++) {
                System.out.print(" \t");
                count++;
            }
    
  3. 输出数字部分(到达本月最大数截止,换行,在指定日期后面假如“*”)

    for (int i = 1; i <= maxDay; i++) {
                if (i == nowDay) {
                    System.out.print(i + "*\t");//指定日期后面假如"*"
                } else {
                    System.out.print(i + "\t");//其余日期正常输出
                }
                count++;
                //当计数器能被7整除,换行
                if (count % 7 == 0) {
                    System.out.println();
                }
            }
    

4. 全部代码及实现效果

package com.zby.TestCalendar;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;

/**
 * @Auther:xxx
 */
public class Test2 {
    public static void main(String[] args) {
        //1.从控制台获取一个日期。如2022-10-30
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想要查看的日期:(提示:请按照格式例如2019-3-7)");
        String date = sc.next();
        //2.获得日历对象
        Calendar cal = new GregorianCalendar();//Calendar类是抽象类,所以这里使用Calendar的子类GregorianCalendar
        java.sql.Date d = java.sql.Date.valueOf(date);//读入输入的日期
        cal.setTime(d);//设置好Calender对象

        //3.获取需要的信息
        /*  制作一个日历,我们接下来需要几个信息。
            【1】.本月的最大天数
            【2】.本月第一天在第一行第几个
        */
        //【1】.本月的最大天数
        int maxDay = cal.getActualMaximum(Calendar.DATE);
        //【2】.本月第一天在第一行第几个
        /*  Calender中自带查询日期所在位置的功能,
            所以我们先需要将日期设置为本月的第一天。
            然后便可获得日期。
        */
//        System.out.println(cal.get(Calendar.DATE));
        int nowDay = cal.get(Calendar.DATE);//保留目前的日期,为后续添加"*"做准备
        cal.set(Calendar.DATE, 1);//设置日期为当月第一天
        int num = cal.get(Calendar.DAY_OF_WEEK);//获取到第一天所在列数
//        System.out.println("num = "+ num);
        //4.制作日历
        //输出日历表头
        System.out.println("---------------------------");
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        System.out.println("---------------------------");
        //日历输出
        int count = 0;
        for (int i = 1; i <= num - 1; i++) {
            System.out.print(" \t");
            count++;
        }
        for (int i = 1; i <= maxDay; i++) {
            if (i == nowDay) {
                System.out.print(i + "*\t");//指定日期后面假如"*"
            } else {
                System.out.print(i + "\t");//其余日期正常输出
            }
            count++;
            //当计数器能被7整除,换行
            if (count % 7 == 0) {
                System.out.println();
            }
        }
    }
}

结果展示:
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值