【自学java笔记#第十五天#】输出当月日期

选用教材:《Java核心技术卷一》

第四章 对象与类

一、书上代码示例:输出当月日期。

第一种写法:

public class CalendarTest 
{
    public static void main(String[] args)
    {
        LocalDate date=LocalDate.now();//得到一个表示当前日期的对象
        int month=date.getMonthValue();//得到当前日期的年
        int today=date.getDayOfMonth();//得到当前日期的日
        
        date=date.minusDays(today-1);//生成当前日期之前16天的日期
        DayOfWeek weekday=date.getDayOfWeek();//得到当前日期是星期几,作为DayOfWeek的一个实例返回
        int value=weekday.getValue();//调用getValue方法来得到1-7之间的一个数,表示这是星期几
        //1表示星期一,7表示星期日。 
        
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        System.out.print("                        ");//第一行缩进
        for(int i=1;i<value;i++)
        {
            while(date.getMonthValue()==month)
            {
                System.out.printf("%3d",date.getDayOfMonth());
                if(date.getDayOfMonth()==today)
                    System.out.print("*");//当前日期后加一个*标志
                else
                    System.out.print(" ");
                date=date.plusDays(1);//生成当前日期之后1天的日期
                if(date.getDayOfWeek().getValue()==1)//达到一周的星期一就换行
                    System.out.println();
            }
            if(date.getDayOfWeek().getValue()!=1)
                System.out.println();
        }
                
    }

}

第二种写法:

public class CalendarTest 
{
    public static void main(String[] args)
    {
        LocalDate date=LocalDate.now();//得到一个表示当前日期的对象
        int month=date.getMonthValue();//得到当前日期的年
        int today=date.getDayOfMonth();//得到当前日期的日
        
        date=date.minusDays(today-1);//生成当前日期之前16天的日期
        DayOfWeek weekday=date.getDayOfWeek();//得到当前日期是星期几,作为DayOfWeek的一个实例返回
        int value=weekday.getValue();//调用getValue方法来得到1-7之间的一个数,表示这是星期几
        //1表示星期一,7表示星期日。 
        
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        
        for(int i=1;i<value;i++)
        System.out.print("    ");//第一行缩进
            while(date.getMonthValue()==month)
            {
                System.out.printf("%3d",date.getDayOfMonth());
                if(date.getDayOfMonth()==today)
                    System.out.print("*");//当前日期后加一个*标志
                else
                    System.out.print(" ");
                date=date.plusDays(1);//生成当前日期之后1天的日期
                if(date.getDayOfWeek().getValue()==1)//达到一周的星期一就换行
                    System.out.println();
            }
            if(date.getDayOfWeek().getValue()!=1)
                System.out.println();
        
                
    }

    

}

二、比较难理解的地方:

1、类DayOfWeek的实例化:

 DayOfWeek weekday=date.getDayOfWeek();

得到当前日期是周几,再以一个实例返回。

2、getValue()方法的错误理解:

并不是初始值为7,而是当天(2020.3.7)本来就是周日。

3、首行缩进:

 System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        System.out.print("                        ");//第一行缩进

可以放在后面的for循环里,也可以放在这个位置。缩进多少取决于当天是周几。个人认为第一种写法更方便理解。

4、诡异的换行符:

 date=date.plusDays(1);//生成当前日期之后1天的日期
                if(date.getDayOfWeek().getValue()==1)//达到一周的星期一就换行
                    System.out.println();

这里是判断当前日期是否是下一周的周一,若是,则换到新的一周。开始没注意到输出Day的语句在上面,所以理解成了到了下一周的周日才换行。

5、循环之外的输出语句:

 if(date.getDayOfWeek().getValue()!=1)
                System.out.println();

我的理解是:这一个判断条件加一个输出语句,是为了确保最后date对应的天数超过了本月,从而不让程序继续输出第二个月的日历。

猜你喜欢

转载自www.cnblogs.com/yizhinailu/p/12513190.html