// 用法一:获取当前日期 // 1.获取当前日期 // LocalDate.now().minusDays(1); // 正数时 减n天 负数时,加 n 天 等同于函数 plusDays //LocalDate.now().plusDays(1); // 正数时 加n天 负数时,减 n 天 等同于函数 minusDays LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime); //localDate:2025-03-24 localTime:11:38:09.077 localDateTime:2025-03-24T11:38:09.077 log.info("localDate:{}, localTime:{}, localDateTime:{}", localDate, localDateTime, localDateTime); // 2.获取 年、月、天 Month month = LocalDate.now().getMonth(); int value2Month = month.getValue(); int monthValue = LocalDate.now().getMonthValue(); // month:MARCH, month to value: 3, monthValue: 3 log.info("month:{}, month to value: {}, monthValue: {}", month, value2Month, monthValue); int num1 = 999_999_999; int num2 = 999999999; // num1:999999999, num1 == num2: true log.info("num1:{}, num1 == num2: {}", num1, (num1 == num2)); int day2Month = LocalDate.now().getDayOfMonth(); int day2Year = LocalDate.now().getDayOfYear(); Month month2 = LocalDate.now().getMonth(); int year = LocalDate.now().getYear(); log.info("day: {},day2Year: {}, month: {}, year: {}", day2Month, day2Year, month2, year); // 3.获取详细信息 获取星期几 获取日期在年份中的第几天 获取日期所在月份的天数 获取日期所在年份的天数 检查日期所在年份是否为闰年 /*** 获取星期几枚举值* 检查日期所在年份是否为闰年* 检查日期所在年份是否为闰年*/ LocalDate currentDate = LocalDate.now(); DayOfWeek dayOfWeek = currentDate.getDayOfWeek(); int daysofWeekValue = currentDate.getDayOfWeek().getValue(); int dayOfYear = currentDate.getDayOfYear(); boolean isLeapYear = currentDate.isLeapYear(); int daysInMonth = currentDate.lengthOfMonth(); int daysInYear = currentDate.lengthOfYear();log.info("当前日期: {}", currentDate); //当前日期: 2025-03-25 log.info("今天是星期几: {}, 是这一星期的第几天: {}", dayOfWeek, daysofWeekValue); //今天是星期几: TUESDAY, 是这一星期的第几天: 2 log.info("日期在年份中的第几天: {}", dayOfYear); //日期在年份中的第几天: 84 log.info("是否为闰年: {}", isLeapYear); //是否为闰年: false log.info("当前月份的天数: {}", daysInMonth); //当前月份的天数: 31 log.info("当前年份的天数: {}", daysInYear); // 当前年份的天数: 365// 用法二:创建特定的日期 使用 LocalDate.of(year, month, day) // 格式标准的String对象转化为LocalData对象 LocalDate.parse用于将字符串表示的日期解析为 LocalDate 对象 LocalDate someDate = LocalDate.of(2023,10,22); log.info("当前日期为:{}", someDate);//当前日期为:2023-10-22//创建一个字符串日期 格式化日期规则 String stringdata="2023-01-06"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //将字符串日期按照规则转化为LocalData对象 LocalDate str2localDate= LocalDate.parse(stringdata,formatter); log.info("当前日期为: {}", str2localDate);//当前日期为:2023-01-06// 原始日期字符串 yyyy-M-d 使用 DateTimeFormatter 格式化日期,指定月份和日期部分的宽度为两位 yyyy-MM-dd String originalDate = "2023-1-1"; LocalDate date = LocalDate.parse(originalDate, DateTimeFormatter.ofPattern("yyyy-M-d")); String localDate2Str = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); log.info("格式化前的日期:{}, 格式化后的日期:{}", originalDate, localDate2Str);// 格式化前的日期:2023-1-1, 格式化后的日期:2023-01-01// 用法三:LocalDate的日期运算 // 1.增加或减少指定年数。 plusYears(long years), minusYears(long years) // 2.增加或减少指定月数 plusMonths(long months), minusMonths(long months) // 3.增加或减少指定周数 plusWeeks(long weeks), minusWeeks(long weeks) // 4.增加或减少指定天数 plusDays(long days), minusDays(long days) // 5.统一的操作 除了对年月周日单独操作外,我们还可以进行统一的操作,比如增加一年零三个月(plus为增,minus为减) currentDate = LocalDate.now(); LocalDate futureDate = currentDate.plusYears(2); // 增加2年 LocalDate pastDate = currentDate.minusYears(1); // 减少1年 log.info("增加后的年数: {}, 减少后的年数: {}", futureDate, pastDate); // 增加后的年数: 2027-03-25, 减少后的年数: 2024-03-25currentDate = LocalDate.of(2025,3,31);; futureDate = currentDate.plus(Period.of(1, 2, 0)); // 增加1年2个月 log.info("当前日期: {}, 增加后的日期: {}", currentDate, futureDate); //当前日期: 2025-03-25, 增加后的日期: 2026-05-25LocalDate anyDate = LocalDate.of(2025,3,31); // 当前时间 2025-03-31 futureDate = currentDate.plus(Period.of(0, 1, 0)); // 月底的最后一天,增加1个月, 到下个月的月底的最后一天 log.info("当前日期: {}, 增加后的日期: {}", anyDate, futureDate); //当前日期: 2025-03-31, 增加后的日期: 2025-04-30 futureDate = currentDate.minus(Period.of(0, 1, 0)); // 月底的最后一天, 减少1个月, 到上个月的月底的最后一天 log.info("当前日期: {}, 增加后的日期: {}", anyDate, futureDate); //当前日期: 2025-03-31, 增加后的日期: 2025-02-28// 用法四:获取特定时间 // 获取当前时间所在周,月等信息的特定时间 // 1.获取当前时间所在周的第一天以及最后一天: // 2.获取当前时间所在月的第一天以及最后一天: // 3.获取当前时间所在周是本年以及本月第几周 currentDate = LocalDate.now(); // 获取当前周的第一天(星期一) 获取当前周的最后一天(星期日) LocalDate firstDayOfWeek = currentDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); LocalDate lastDayOfWeek = currentDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); log.info("本周第一天: {}, 本周最后一天: {}", firstDayOfWeek, lastDayOfWeek); //本周第一天: 2023-10-09// 获取当前月的最后一天 LocalDate firstDayOfMonth = currentDate.with(TemporalAdjusters.firstDayOfMonth()); LocalDate lastDayOfMonth = currentDate.with(TemporalAdjusters.lastDayOfMonth()); log.info("本月第一天: {}, 本月最后一天: {}", firstDayOfMonth, lastDayOfMonth); //本月第一天: 2023-10-01// 获取当前日期所在周是本月的第几周, minimalDaysInFirstWeek 是一周的第几天 如 今天2025-03-25 是周二 那么周3就是本周的第四周,周一、周二就是本周的第五周 WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,3); int weekOfMonth = currentDate.get(weekFields.weekOfMonth()); // 获取当前日期所在周是本年的第几周 int weekOfYear = currentDate.get(weekFields.weekOfWeekBasedYear()); log.info("当前日期所在周是本月的第 {} 周, 当前日期所在周是本年的第 {} 周", weekOfMonth, weekOfYear); // TemporalAdjusters 是 Java 8 中的一个实用工具类 它提供了一些内置的、用于日期时间调整的工具方法。这些方法允许你进行复杂的日期时间调整操作, // 如获取某月的第一天、获取下一个星期一、获取年底最后一天等。TemporalAdjusters 中的方法返回 TemporalAdjuster 对象,这是一个函数式接口, // 用于在 java.time 框架中进行日期时间的调整。以下是一些常见的 TemporalAdjusters 方法及其功能 //lastDayOfMonth():返回指定日期所在月份的最后一天。 //firstDayOfNextMonth():返回指定日期下个月的第一天。 //firstDayOfNextYear():返回指定日期下一年的第一天。 //next(DayOfWeek dayOfWeek):返回指定日期之后的下一个星期几。例如,next(DayOfWeek.MONDAY) 返回下一个星期一。 //previous(DayOfWeek dayOfWeek):返回指定日期之前的上一个星期几。 //nextOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回下一个指定星期几。 //previousOrSame(DayOfWeek dayOfWeek):返回指定日期,如果它是指定星期几,则返回它本身,否则返回上一个指定星期几。 //firstInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的第一个指定星期几。 //lastInMonth(DayOfWeek dayOfWeek):返回指定日期所在月份的最后一个指定星期几。 //dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek):返回指定日期所在月份的第 ordinal 个指定星期几。例如,dayOfWeekInMonth(2, DayOfWeek.WEDNESDAY) 返回指定日期所在月份的第二个星期三。 //firstDayOfYear():返回指定日期所在年份的第一天。 //lastDayOfYear():返回指定日期所在年份的最后一天。// 用法五:日期的比较 // 1. equals() 方法 用于检查两个 LocalDate 对象是否表示相同的日期。如果两个对象表示相同的日期,equals() 方法将返回 true,否则返回 false。 LocalDate date1 = LocalDate.of(2023, 5, 15); LocalDate date2 = LocalDate.of(2023, 5, 15); LocalDate date3 = LocalDate.of(2023, 5, 16); boolean areEqual = date1.equals(date2); // 返回 true boolean areEqual2 = date1.equals(date3); // 返回 false log.info("2023-05-15 与 2023-05-15 equal 比较: {}, 2023-05-15 与 2023-05-16 equal 比较: {}", areEqual, areEqual2); // 2.isBefore() 方法 用于检查一个 LocalDate 是否在另一个 LocalDate 之前。如果第一个日期在第二个日期之前,该方法返回 true,否则返回 false。 date1 = LocalDate.of(2023, 5, 15); date2 = LocalDate.of(2023, 5, 20); boolean isBefore = date1.isBefore(date2); // 返回 true boolean isBefore2 = date2.isBefore(date1); // 返回 false log.info("2023-05-15 与 2023-05-20 isBefore 比较: {}, 2023-05-20 与 2023-05-15 isBefore 比较: {}", isBefore, isBefore2); // 3.isAfter() 方法 用于检查一个 LocalDate 是否在另一个 LocalDate 之后。如果第一个日期在第二个日期之后,该方法返回 true,否则返回 false。date1 = LocalDate.of(2023, 5, 15); date2 = LocalDate.of(2023, 5, 10); boolean isAfter = date1.isAfter(date2); // 返回 true boolean isAfter2 = date2.isAfter(date1); // 返回 false log.info("2023-05-15 与 2023-05-10 isAfter 比较: {}, 2023-05-10 与 2023-05-15 isAfter 比较: {}", isAfter, isAfter2);// 4.compareTo() 方法 用于将两个 LocalDate 对象进行比较,并返回一个整数值。如果第一个日期在第二个日期之前,返回负数; // 如果两个日期相同,返回零;如果第一个日期在第二个日期之后,返回正数。date1 = LocalDate.of(2023, 5, 15); date2 = LocalDate.of(2023, 5, 20); int result = date1.compareTo(date2); // 返回-5 int result2 = date2.compareTo(date1); // 返回5 log.info("2023-05-15 与 2023-05-20 compareTo 比较: {}, 2023-05-20 与 2023-05-15 compareTo 比较: {}", result, result2);