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

*/

目录
相关文章
|
2月前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
2月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
102 6
|
3月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
50 4
|
4月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
171 3
|
4月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
41 2
|
4月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
107 2
|
4月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
62 3
|
IDE Java 关系型数据库
Java14发布,16大新特性,代码更加简洁明快
Java14发布,16大新特性,代码更加简洁明快
338 0
Java14发布,16大新特性,代码更加简洁明快
|
4天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
45 14
|
7天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
37 13

热门文章

最新文章