Java类库的设计者将保存时间与给时间点命名分开。所以标准Java类库分别包含了两个类:一个是用来表示时间点的Date类;另一个是用来表示日历表示法的LocalDate类。这里简单分析了LocalDate类的使用,即打印一个本月的日历表。熟悉java类库的一些基本操作,以及锻炼程序的设计思路。
首先,这里不能使用构造器来构造LocalDate类的对象,应当使用静态工厂方法代表你调用构造器,并保存在一个对象变量中。
![](https://img.haomeiwen.com/i5493968/1c91828b910717cb.png)
一旦有了一个LocalDate对象,可以用方法getYear、getMonthValue和getDayOfMonth得到年、月和日。
![](https://img.haomeiwen.com/i5493968/75ca5799417ecfff.png)
看起来这似乎没有多大的意义。因为这正是构造对象时使用的那些值。不过,有时可能某个日期是计算得到的,你希望调用这些方法得到更多信息。例如,plusDays方法会得到一个新的LocalDate对象
![](https://img.haomeiwen.com/i5493968/fd2b26a2312842dc.png)
好,现在就上全部的代码和结果。
![](https://img.haomeiwen.com/i5493968/32b5899c57bc51fd.png)
![](https://img.haomeiwen.com/i5493968/31fa40dc415e59f7.png)
设计思路是这样的,先获取当前时间,并把当前时间的月和日,保存在month和today变量里。
![](https://img.haomeiwen.com/i5493968/5b1d821bb1d81728.png)
然后再找到这个月的第一天。其中,minusDays(LocalDate minusDays(int n))这个方法的意思是,生成当前日期之后或之前的n天,n为正数时,是前n天。这里假设today是2,那么today-1就是1,所以是2号的前1天,也就是1号,为本月的第一天。
![](https://img.haomeiwen.com/i5493968/b0daf6441cb2aeef.png)
得到本月的第一天的作用是为了得到第一天是星期几,这里使用一个了DayOfWeek类型(内部使用的是enum类型表示的星期一到星期日)的变量保存是星期几。我们调用date这个对象的getValue方法来得到星期几的一个数值。这会用到一个整数,按照惯例,周末是一周的末尾,星期一返回1,星期二返回2,依此类推,星期日则返回7。
![](https://img.haomeiwen.com/i5493968/a3cbf025507f4848.png)
由于日历的第一行是缩进的,使得月份的第一天指向相应的星期几。
![](https://img.haomeiwen.com/i5493968/b022fe3547ec716d.png)
打印好第一行并缩进后,开始依次打印对应的号数了。每打印一天就加一天(plusDays(1)),生成的新对象重新引用给date。如果打印到today,使用*号标记。打印到星期天时,需要换行。
![](https://img.haomeiwen.com/i5493968/5083014dc543083d.png)
预打印下一个月份。
![](https://img.haomeiwen.com/i5493968/d5e4bc43b9815b9c.png)
网友评论