/**
- LocalDate是Java 8中的日期时间API之一,它提供了一种处理日期(年月日)的简单方式,而不涉及时间和时区。
- LocalDate是一个不可变的类,它表示ISO-8601日历系统中的日期,它是线程安全的。
- LocalDate类提供了许多方法来处理日期,例如获取日期的年份,月份和日等。
- 下面是一些常用的方法:
*/
// 创建LocalDate对象
LocalDate localDate = LocalDate.now(); // 获取当前日期
LocalDate localDate1 = LocalDate.of(2021, 10, 1); // 通过指定年月日创建LocalDate对象
// 获取年份、月份、日等
int year = localDate.getYear();
Month month = localDate.getMonth();
int dayOfMonth = localDate.getDayOfMonth();
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
int dayOfYear = localDate.getDayOfYear();
// 日期计算
LocalDate localDate2 = localDate.plusDays(1); // 加一天
LocalDate localDate3 = localDate.minusDays(1); // 减一天
LocalDate localDate4 = localDate.plusMonths(1); // 加一个月
LocalDate localDate5 = localDate.minusMonths(1); // 减一个月
LocalDate localDate6 = localDate.plusYears(1); // 加一年
LocalDate localDate7 = localDate.minusYears(1); // 减一年
// 判断日期先后
boolean isBefore = localDate.isBefore(localDate1); // 判断localDate是否在localDate1之前
boolean isAfter = localDate.isAfter(localDate1); // 判断localDate是否在localDate1之后
// 获取两个日期之间的天数
long daysBetween = ChronoUnit.DAYS.between(localDate1, localDate2);
// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = localDate.format(formatter);
//初始化
![image.png](https://ucc.alicdn.com/pic/developer-ecology/qslttrsa2s3vk_189cd3d234af4c0eb1b8c4d792b3c4d3.png)
LocalDate date = LocalDate.now();
LocalDate.of(2021, 7, 1);
LocalDate.parse("2021-07-01");
//plus-按给定数量增加日期值
LocalDate datePlus = date.plusDays(5);
LocalDate datePlus2 = date.plusWeeks(2);
LocalDate datePlus3 = date.plusMonths(3);
LocalDate datePlus4 = date.plusYears(4);
//minus-按给定数量减去日期值
LocalDate dateMinus = date.minusDays(5);
LocalDate dateMinus2 = date.minusWeeks(2);
LocalDate dateMinus3 = date.minusMonths(3);
LocalDate dateMinus4 = date.minusYears(4);
//with-调整日期
LocalDate dateWith = date.withYear(2022);
LocalDate dateWith2 = date.withMonth(8);
LocalDate dateWith3 = date.withDayOfMonth(15);
//get-获取日期信息
int year = date.getYear();
Month month = date.getMonth();
int dayOfMonth = date.getDayOfMonth();
DayOfWeek dayOfWeek = date.getDayOfWeek();
int dayOfYear = date.getDayOfYear();
//LocalDate format()转换格式
String strDate = date.format(DateTimeFormatter.ISO_DATE);
String strDate2 = date.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
//atTime()-将LocalDate与时间结合转化为LocalDateTime
LocalDateTime dateTime = date.atTime(12, 30, 45);
//atStartOfDay()将LocalDate转化为 LocalDateTime
LocalDateTime dateTime2 = date.atStartOfDay();
//LocalDate isAfter(), isBefore() and isEqual()比较日期
LocalDate date2 = LocalDate.of(2022, 1, 1);
boolean isAfter = date.isAfter(date2);
boolean isBefore = date.isBefore(date2);
boolean isEqual = date.isEqual(date2);
//LocalDate isLeapYear(), isSupported()检查闰年和输入域
boolean isLeapYear = date.isLeapYear();
boolean isSupported = date.isSupported(ChronoUnit.DAYS);
//LocalDate lengthOfMonth(), lengthOfYear()检查月份和年份天数最大值
int lengthOfMonth = date.lengthOfMonth();
int lengthOfYear = date.lengthOfYear();
//LocalDate datesUntil()返回指定时间段
LocalDate date3 = LocalDate.of(2021, 12, 31);
long daysUntil = date.until(date3, ChronoUnit.DAYS);
long monthsUntil = date.until(date3, ChronoUnit.MONTHS);
long yearsUntil = date.until(date3, ChronoUnit.YEARS);
//LocalDateuntil()计算两个日期之间的时间量
LocalDate date4 = LocalDate.of(2022, 1, 1);
long daysBetween = date.until(date4, ChronoUnit.DAYS);
long monthsBetween = date.until(date4, ChronoUnit.MONTHS);
long yearsBetween = date.until(date4, ChronoUnit.YEARS);
//LocalDate compareTo() and equals()比较日期
LocalDate date5 = LocalDate.of(2021, 7, 1);
int compareResult = date.compareTo(date5);
boolean isEqual2 = date.equals(date5);
//LocalDate adjustlnto()复制日期
LocalDate date6 = LocalDate.of(2021, 7, 1);
LocalDate date7 = date.adjustInto(date6);
//LocalDate query()查询日期
TemporalQuery<TemporalUnit> query = TemporalQueries.precision();
TemporalUnit precision = date.query(query);
//LocalDate range()字段有效值范围。
ValueRange range = date.range(ChronoField.DAY_OF_MONTH);
//LocalDate toEpochDay() and toEpoch Second()
long epochDay = date.toEpochDay();
Instant instant = date.atStartOfDay().toInstant(ZoneOffset.UTC);
long epochSecond = instant.getEpochSecond();
/**
- 优点:
-
- LocalDate是线程安全的,可以在多线程环境下使用。
-
- LocalDate提供了许多方法来处理日期,例如获取日期的年份,月份和日等。
-
- LocalDate是不可变的,可以避免并发问题。
-
- LocalDate提供了丰富的日期计算方法,例如加减天数、月数、年数等。
-
- LocalDate提供了格式化日期的方法,可以将日期格式化为指定的格式。
*
- 缺点:
-
- LocalDate只能处理日期,不能处理时间和时区。
-
- LocalDate的日期计算方法返回的是新的LocalDate对象,而不是修改原有的对象,可能会导致内存浪费。
*/