当前位置: 首页 > news >正文

Java8 LocalDate LocalTime LocalDateTime的使用

// 用法一:获取当前日期
// 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-25

currentDate = LocalDate.of(2025,3,31);;
futureDate = currentDate.plus(Period.of(1, 2, 0));          // 增加1年2个月
log.info("当前日期: {}, 增加后的日期: {}", currentDate, futureDate);       //当前日期: 2025-03-25, 增加后的日期: 2026-05-25

LocalDate 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);

相关文章:

  • 玄机-第五章 Windows 实战-evtx 文件分析的测试报告
  • position embedding
  • 【测试报告】论坛系统
  • 语言解码双生花:人类经验与AI算法的镜像之旅
  • 树状数组模板
  • 【redis】哨兵:搭建主从/哨兵节点详解和细节
  • 【WebGIS教程2】Web服务与地理空间服务解析
  • Java:JDK8 新特性:Lambda表达式
  • Vulnhub-Thales通关攻略
  • 第30周Java分布式入门 ThreadLocal
  • 无法打开... .exe进行写入 解决方法
  • vue中defineModel简化defineProps和defineEmits的用法
  • KofamKOALA:KEGG本地化注释
  • 无线安灯按钮盒汽车零部件工厂的故障告警与人员调度专家
  • 【干货,实战经验】nginx缓存问题
  • 程序员英语口语练习笔记
  • python dict转换成json格式
  • 深入解析Flink Kafka Connector的分布式流数据采集架构与底层实现
  • 2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明
  • SAP 获取RFC的WSDL文件
  • 程序员做网站给女朋友/长尾关键词排名推广
  • 做网站自动赚钱吗/佛山旺道seo优化
  • 孝感网站开发公司/百度快速排名平台
  • 布吉商城网站建设哪家公司靠谱/电商网
  • 网站免费备案/山东一级造价师
  • 南京网站制作/开发一个app需要多少钱?