【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对象,而不是修改原有的对象,可能会导致内存浪费。

*/

目录
相关文章
|
3月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
82 2
|
3月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
50 3
|
26天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
57 6
|
2月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
39 4
|
3月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
117 3
|
3月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
32 2
|
安全 Oracle Java
告别jodatime!拥抱Java8日期时间类LocalDate、LocalDateTime详解(上)
告别jodatime!拥抱Java8日期时间类LocalDate、LocalDateTime详解
231 0
告别jodatime!拥抱Java8日期时间类LocalDate、LocalDateTime详解(上)
|
SQL Java 测试技术
告别jodatime!拥抱Java8日期时间类LocalDate、LocalDateTime详解(下)
告别jodatime!拥抱Java8日期时间类LocalDate、LocalDateTime详解
310 0
|
11天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者