「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
LocalDate
这三个属性是final,因此属性不可改变.当plus和minus时,不会改变当前对象,而是产生新的对象.
private final int year;
private final short month;
private final short day;
通过now()方法获取当前时间
LocalDate date = LocalDate.now(); // 2021-11-08
// 获取年份
int year = date.getYear();
// 获取月份的枚举
Month month = date.getMonth();
// 获取月份
int monthValue = date.getMonthValue();
// 获取日期
int dayOfMonth = date.getDayOfMonth();
// 获取星期
DayOfWeek dayOfWeek = date.getDayOfWeek();
对LocalDate对象进行操作.
- 通过
getYear()获取当前年份 - 通过
getMonth()获取当前月份的枚举类型 - 通过
getMonthValue()获取月份值 - 通过
getDayOfMonth()获取日期 - 通过
getDayOfWeek()获取星期
生成localDate
1.通过now()方法创建LocalDate对象
LocalDate date = LocalDate.now(); //2021-11-08
2.of()方法手动生成localDate对象
当手动创建的不符合规范,就会报错,如2021-13-42
// 年-月-日
LocalDate of = LocalDate.of(1, 1, 1); //0001-1-1
// 年,年当中的日期
LocalDate localDate1 = LocalDate.ofYearDay(2021, 222); // 2021-08-10
获取年月日
通过get方法即可获取.
其中,获取day是getDayOfMonth() 方法.
int year1 = localDate2.getYear();
Month month1 = localDate2.getMonth();
int dayOfMonth1 = localDate2.getDayOfMonth();
是否为闰年
isLeapYear() 判断当前localDate对象是否为闰年
LocalDate localDate1 = LocalDate.ofYearDay(2020, 222); //2020-08-09
boolean leapYear = localDate1.isLeapYear(); // yes
// 源码
public boolean isLeapYear(long prolepticYear) {
return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);
}
lengthOfYear 返回当前对象一年包含的天数.闰年返回366天
源码就是通过isLeapYear方法判断是否为闰年来返回天数
int dayOfYear = localDate1.lengthOfYear(); //366
// 源码
public int lengthOfYear() {
return (isLeapYear() ? 366 : 365);
}
增加减少
-
增加:plus
- plusYears
- plusMonths
- plusDays
-
减少:minus
- minusYears
- minusMonths
- minusDays
LocalDate直接增加月份.
对LocalDate进行plusMonth()方法增加指定的月份,会得到一个新的LocalDate对象.
minusMonths() 减少月份
LocalDate date = LocalDate.now(); // 2021-11-08
// 月份增加1得到一个新的对象
LocalDate localDate = date.plusMonths(1); //2021-12-08
比较
isAfter() 判断当前的对象是否比目标对象迟
源码通过提取年月日相减进行比较.当年相减为0时,才会进行月相减.否则直接返回相减结果.然后对结果进行判断,如果大于0,那么返回true.
isBefore
isEqual localDate的rquals进行了重写,基本上等于isEquals方法.多了一个地址的判断.
LocalDate date = LocalDate.now(); // 2021-11-08
LocalDate localDate1 = LocalDate.ofYearDay(2020, 222); //2020-08-09
// 日期比较
boolean after = localDate.isAfter(localDate1); //true
// 源码
public boolean isAfter(ChronoLocalDate other) {
if (other instanceof LocalDate) {
return compareTo0((LocalDate) other) > 0;
}
return ChronoLocalDate.super.isAfter(other);
}
// 调用的下面的方法
int compareTo0(LocalDate otherDate) {
int cmp = (year - otherDate.year);
if (cmp == 0) {
cmp = (month - otherDate.month);
if (cmp == 0) {
cmp = (day - otherDate.day);
}
}
return cmp;
}