更改器方法与访问器方法(应用LocalDate类显示当月日历)
更改器方法与访问器方法(应用LocalDate类显示当月日历)
上一篇的plusDays方法调用:
LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
这个调用之后 newYearsEve会有什么变化?他会改为1000天之后的日期吗?事实上并没有。plusDays方法会生成一个新的LocalDate对象,然后把这个新对象赋给aThousandDaysLater变量。原来对象不做任何改动。plusDays方法没有更改调用这个方法的对象。
只访问对象而不修改对象的方法有时被称为 访问器方法
下面是应用LocalDate类显示当月日历的程序代码:
import java.time.*;
/**
* 更改器方法和访问器方法
* @version 显示当前月的日历 2022-01-15
* @author zengzhicheng
*
*/
public class CalendarTest {
public static void main(String[] args) {
LocalDate date =LocalDate.now(); //构建日历对象,用当前的日期和时间进行初始化
int month = date.getMonthValue(); //获得当前月
int today = date.getDayOfMonth(); //获得当前日
//将date设置为这个月第一天,并得到这一天星期几
date = date.minusDays(today -1 );
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue(); //调用getValue方法得到星期几的一个数值,周一返回1,周二返回2,以此类推
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();
}
}
最后是LocalDate 的API
API Java.time.LocalDate
static LocalTime now()
//构造一个表示当前日期的对象
static LocalTime of(int year,int month,int day)
//构造一个表示给定日期的对象
int getYear()
int getMonthValue()
int getDayOfMonth()
//得到当前日期的年、月和日。
DayOfWeek getDayOfWeek
//得到当日期是星期几,作为DayOfWeek类的一个实例返回。调用getValue来得到1~7之间的一个数,表示这是星期几,1表示星期以,7表示星期日
LocalDate plusDays(int n)
LocalDate minusDays(int n)
//生成当前日期之后或之前N天的日期
参考书籍:
《Java核心技术·卷Ⅰ:基础知识(原版10版)》