Java中的LocalDate类——打印当前月份的日历程序清单

参考博客:https://www.cnblogs.com/IcanFixIt/p/8539007.html

import java.time.DayOfWeek;
import java.time.LocalDate;

public class LocalDateDemo {
    public static void main(String[] args) {

        LocalDate date = LocalDate.of(2019,06,11); //获取一个时间
        int month = date.getMonthValue(); //获取当前时间的月份
        int today = date.getDayOfMonth(); //获取当时时间月份中的日期
       // System.out.println(month+" "+today); //打印输出月份和日期

        /*
        将date设置为这个月的第一天(可以这样理解,minusDays是// 给LocalDate减去指定的天数
        而减去(today-1)就是减去今天之前的时间就得到了第一天比如今天是19年6月11(星期二),
        减去11-1就是减去十天
        就是1号。
        */
        date =date.minusDays(today-1);

        //将date转化为weekday类型 就是 Sunday(日), Monday(一), Tuesday(二),
        // Wednesday(三), Thursday(四), Friday(五), Saturday(六)
         也就是一周的第几天的英文表示
         
        DayOfWeek weekday = date.getDayOfWeek();
        
        //然后 DayOfWeek 有个getValue方法 把英文转化为数字 比如Monday会转化为1,
        Saturday 会转化为6
        
        int value = weekday.getValue() ;
       // System.out.println(value);
       
        //日历的第一行可能是缩进的
        
        System . out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 1; i < value ; i++)
            System.out.print("    ");
            
        // date.getMonthValue()==month 这个条件的意思是 如果是当前月就一直执行也就是6月
        ,也就是6
        // 后面有个递进条件date=date.plusDays(1);//把date递增直到八月
        while(date.getMonthValue()==month){

            System.out.printf("%3d",date.getDayOfMonth());      //格式化输出
             比如输出第二天就是__2第十五天就是_15
            // 看不懂的可以去掉%3d试试

            if(date.getDayOfMonth()==today)//若date是当前日期,则用*标记

                System.out.print("*");

            else

                System.out.print(" ");  //每输出一个数后再输出一个空格 因为Mon_,Tue_是占四个空格 不加对不上

            date = date.plusDays(1);//把date推进到下一天

            if(date.getDayOfWeek().getValue()==1)//如果到达新的一周的第一天,则换行打印
                System.out.println();
        }
        if(date.getDayOfWeek().getValue()!=1)        //这句个人认为毛都没用呀,不等于1执行,
        我这种情况刚好等于1,不执行呀!因为当日期加到8月1号后 还会打印一次空格
            System.out.println();              //换做7月11日的时候执行了 就是美化代码的作用

    }


}
将会打印
Mon Tue Wed Thu Fri Sat Sun
                      1   2 
  3   4   5   6   7   8   9 
 10  11* 12  13  14  15  16 
 17  18  19  20  21  22  23 
 24  25  26  27  28  29  30 

Process finished with exit code 0

版权声明:本文为m0_37785241原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。