java简单小日历(适合刚学完时间类)

要求

在这里插入图片描述

话不多说,上代码

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Test {
    
    
    public static void main(String[] args) throws ParseException {
    
    
        System.out.println("请输入日期:(年月日,格式:2008-9-20)");
        //自定义日期格式
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd");
        //键盘输入
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        //将输入的字符串转换成日期
        Date d1 = s1.parse(str);
        //将Date放入Calendar中,我们知道java的元年是1900年
        /*GregorianCalendar calendar = new GregorianCalendar(d1.getYear() + 1900,d1.getMonth(),d1.getDate());*/
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(d1);
        //获取今天是本月第几天
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        //因为要知道本月第一天是周几,所以需要先设置为本月第一天
        calendar.set(Calendar.DATE,1);
        //获取本月第一天是周几
        int weekInitial = calendar.get(Calendar.DAY_OF_WEEK);
        //判断本月有多少天 写法1
        int dayLast = calendar.getActualMaximum(Calendar.DATE);
        /*
        //判断本月有多少天 写法2
        int month = calendar.get(Calendar.MONTH);//获取是第几月
        int year = calendar.get(Calendar.YEAR);//获取本年
        int dayLast;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 ||
                month == 12){
            dayLast = 31;
        }else if (month == 2){
            //判断平年闰年
            if ((year % 4 == 0 && year % 100 == 0) || year % 400 == 0){
                dayLast = 29;
            }else{
            dayLast = 28;}
        }else{
        dayLast = 30;}
        */
        System.out.println("日\t一\t二\t三\t四\t五\t六\t");
        //打印本月1号前的空格
        for (int i = 1;i < weekInitial;i++){
    
    
            System.out.print("\t");
        }
        //打印日期
        for (int i = 1;i <= dayLast;i++){
    
    
            //如果是本天,则多打印一个 *
            if (i == day)
            {
    
    System.out.print("*" + i +"\t");}
            else {
    
     System.out.print(i + "\t");}
            //判断遍历时,是周几
            int week2 = calendar.get(Calendar.DAY_OF_WEEK);//如果是周六。返回7
            if (week2 == 7){
    
    
                System.out.println();
            }
            //最后一定要记得天数自增
            calendar.add(Calendar.DAY_OF_MONTH,1);
        }
    }
}

在这里插入图片描述

遇到的问题

  1. 问题一
    由于自己刚刚学完时间类,学艺不精,自己创造GregorianCalendar 时,用的是代码中注释的语句。
    而且自己的第一次写的是GregorianCalendar calendar = new GregorianCalendar(d1.getYear() + 1900,d1.getMonth() + 1,d1.getDate());
    这里暴露出巨大的问题,因为Java中从二月算是一,自己就想着来个加一就是我们中国的计算法,却忘记了后面的操作的月份还是根据Java中的规矩,自己如果盲目加一,后面就是9月,无论怎么输入,都是不正确的。
  2. 问题二
    自己学艺不精,在确定本月有多少天时,用了最笨的方法。
    其实可以用int dayLast = calendar.getActualMaximum(Calendar.DATE);直接找出
  3. 问题三
    在日期遍历时,注意一定要用calendar进行遍历,只有这样才能判断周几,选择在周六时换行

最后,注意的事项
一定要注意Java中,从1999年1月1日00:00:00算起,二月为第一个,周日为第一个
在运算时,先不要对其进行修改,若要打印出来,再进行修改,变成我们熟知的样式

本文是自己完成尚学堂作业时,自己的拙见,如有问题,欢迎指教


# 第二次编辑 认识到前面自己的解释有问题,注释中的中的代码不要用。因为虽然`int month = calendar.get(Calendar.MONTH);`,打印的是自己输入的日期月份,但是在设置本月第一天`calendar.set(Calendar.DATE,1);`,代码设置的是按Java中的第几月。如自己输入的是10月,打印出来也是10月,但是在设置本月第一天时,系统认为是设置Java中的10月的第一天(也就是我们的11月1号),所以在后面的`int weekInitial = calendar.get(Calendar.DAY_OF_WEEK);`,获取本月第一天是周几时,系统会判断的是我们的11月1号是周几

おすすめ

転載: blog.csdn.net/qq_45895520/article/details/119717807