【Java 8 新特性】Java LocalDate 详解

简介: 【Java 8 新特性】Java LocalDate 详解

/**

  • LocalDate是Java 8中的日期时间API之一,它提供了一种处理日期(年月日)的简单方式,而不涉及时间和时区。
  • LocalDate是一个不可变的类,它表示ISO-8601日历系统中的日期,它是线程安全的。
  • LocalDate类提供了许多方法来处理日期,例如获取日期的年份,月份和日等。
  • 下面是一些常用的方法:

*/
image.png
image.png
image.png

// 创建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); // 减一年
image.png

// 判断日期先后
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();

/**

  • 优点:
    1. LocalDate是线程安全的,可以在多线程环境下使用。
    1. LocalDate提供了许多方法来处理日期,例如获取日期的年份,月份和日等。
    1. LocalDate是不可变的,可以避免并发问题。
    1. LocalDate提供了丰富的日期计算方法,例如加减天数、月数、年数等。
    1. LocalDate提供了格式化日期的方法,可以将日期格式化为指定的格式。

*

  • 缺点:
    1. LocalDate只能处理日期,不能处理时间和时区。
    1. LocalDate的日期计算方法返回的是新的LocalDate对象,而不是修改原有的对象,可能会导致内存浪费。

*/

目录
相关文章
|
1天前
|
Java API
Java一分钟之-Java日期与时间API:LocalDate, LocalDateTime
【5月更文挑战第13天】Java 8引入`java.time`包,改进日期时间API。`LocalDate`代表日期,`LocalDateTime`包含日期和时间。本文概述两者的基本用法、常见问题及解决策略。创建日期时间使用`of()`和`parse()`,操作日期时间有`plusDays()`、`minusMonths()`等。注意点包括:设置正确的`DateTimeFormatter`,考虑闰年影响,以及在需要时区信息时使用`ZonedDateTime`。正确使用这些类能提升代码质量。
10 3
|
1天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
41 2
|
1天前
|
移动开发 前端开发 NoSQL
ruoyi-nbcio从spring2.7.18升级springboot到3.1.7,java从java8升级到17(二)
ruoyi-nbcio从spring2.7.18升级springboot到3.1.7,java从java8升级到17(二)
47 0
|
1天前
|
移动开发 Oracle 前端开发
本地开发环境安装java8、java17与java21
本地开发环境安装java8、java17与java21
16 0
|
1天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
13 0
|
1天前
|
安全 Java 程序员
Java 8新特性之Lambda表达式
【5月更文挑战第5天】 本文将介绍Java 8中的一个重要新特性——Lambda表达式。Lambda表达式是Java 8引入的一种简洁、易读的函数式编程语法,它允许我们将函数作为参数传递给方法,或者作为返回值。通过使用Lambda表达式,我们可以编写更简洁、更易读的代码,提高开发效率。
|
1天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第1天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的函数式编程语法,可以简化代码并提高可读性。Stream API是一种用于处理集合的新工具,可以方便地进行数据操作和转换。通过结合Lambda表达式和Stream API,我们可以更加简洁高效地编写Java代码。
|
1天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
1天前
|
安全 Java API
Java 8新特性概述及其对编程实践的影响
【4月更文挑战第30天】本文将详细讨论Java 8的新特性,包括Lambda表达式、Stream API以及Optional类等,并探讨这些新特性如何改变了Java编程的实践。我们将通过实例代码展示这些新特性的用法,并分析其对提高代码可读性和编写效率的影响。
|
Java API Apache
Java 9都有哪些新特性?
Java 9都有哪些新特性?
100 0