Date类的实例有一个状态,即特定的时间点。
标准Java类库分别包含了两个类:一个是用来表示时间点的Date类;另一个是用来表示大家熟悉的日历表示法的LocalDate类。
将时间与日历分开是很好的面向对象设计。
不要使用构造器来构造LocalDate类的对象。实际上,应当使用静态工厂方法代表你调用构造器。
LocalDate.now();//会构造一个新对象,表示构造这个对象时的时间。
可以提供年、月、日来构造对应一个特定时期的对象:
LocalDate.of(1999,12,31);
当然,通常都希望将构造的对象保存在一个对象变量中:
LocalDate.newYearsEve = LocalDate.of(1999,12,31);
一旦有了一个LocalDate对象,可以用方法getYear,getMonthValue和getDayOfMonth得到年、月和日:
int year = newYearsEve.getYear();//1999
int month = newYearsEve.getMonthValue();//12
int day = newYearEve.getDayOfMonth();//31
plusDays方法会得到一个新的LocalDate,如果把应用这个方法的对象成为当前对象,这个新日期对象则是距当前对象指定天数的一个新日期:
LocalDtae aThousandDaysLater = newYearsEve.plusDays(1000);
year = aThousandDaysLater.getYear();//2002
month = aThousandDaysLater.getMonthValue();//09
day = aThousandDaysLater.getDayOfMonth();//26
plusDays方法会生成一个新的LocalDate对象,然后把这个新对象赋给aThousandDaysLater变量。原来的对象不做任何变动。我们说plusDays方法没有更改调用这个方法的对象。