JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime

简介: JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime

为什么要学JDK 8 新增的时间?

JDK 8之前传统的时间API

  1. 设计不合理,使用不方便,很多都被淘汰了。
  2. 都是可变对象,修改后会丢失最开始的时间信息。
  3. 线程不安全。
  4. 只能精确到毫秒。

JDK 8开始之后新增的时间API

  1. 设计更合理,功能丰富,使用更方便。
  2. 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间。
  3. 线程安全
  4. 能精确到毫秒、纳秒。

JDK 8新增的时间API

代替Calendar

  • LocalDate:年、月、日0
  • LocalTime:时、分、秒
  • LocalDateTime:年、月、日   时、分、秒
  • ZoneId :时区
  • ZonedDateTime:带时区的时间

代替Date

  • Instant:时间戳/时间线

代替SimpleDateFormat

  • DateTimeFormatter:用于时间的格式化和解析    它是线程安全的

其他补充

  • Period:时间间隔(年、月、日)
  • Duration:时间间隔(时、分、秒、纳秒)

本篇我们先来学习LocalDate、LocalTime、LocalDateTime


  • LocalDate、LocalTime、LocalDateTime
  • LocalDate:代表本地日期(年、月、日、星期)
  • LocalTime:代表本地时间(时、分、秒、纳秒)
  • LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)

获取对象的方案

图片.png

案例演示

1.获取日期对象中的信息

public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
        System.out.println(ld);
 
        //1.获取日期对象中的信息
        int year = ld.getYear();                //获取年
        int month = ld.getMonthValue();         //获取月份
        int day = ld.getDayOfMonth();           //获取日
        int dayOfYear = ld.getDayOfYear();      //获取一年中的第几天
        int dayOfWeek = ld.getDayOfWeek().getValue();      //获取星期几
        System.out.println("年份:" + year);
        System.out.println("月份:" + month);
        System.out.println("日:" + day);
        System.out.println("2024年的第几天:" + dayOfYear);
        System.out.println("星期几:" + dayOfWeek);
    }
}

运行结果:


2.直接修改某个信息

public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
 
        //2.直接修改某个信息   每次修改都会产生一个新的日期对象
        LocalDate ld2 = ld.withYear(2099);      //修改年份为2099年
        LocalDate ld3 = ld.withMonth(12);       //修改月份为12月
        System.out.println("当前:" + ld);
        System.out.println("修改后:");
        System.out.println(ld2);
        System.out.println(ld3);
    }
}

运行结果:


3.把某个信息加或减多少        (加、减也是一样,修改之后会产生新的日期对象)

public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
 
        //3.把某个信息加或减多少
        LocalDate ld4 = ld.plusYears(2);        //加两年
        LocalDate ld5 = ld.plusMonths(2);       //加俩月
        LocalDate ld6 = ld.minusYears(2);       //减两年
        LocalDate ld7 = ld.minusMonths(2);      //减俩月
        System.out.println(ld4);
        System.out.println(ld5);
        System.out.println(ld6);
        System.out.println(ld7);
    }
}

运行结果:


4.获取指定日期的LocalDate对象&判断两个日期对象是否相等,在前还是在后

public class Test {
    public static void main(String[] args) throws ParseException {
        //获取本地日期对象
        LocalDate ld = LocalDate.now();         //年、月、日
 
        //获取指定日期的LocalDate对象
        LocalDate ld8 = LocalDate.of(2099,12,12);
        LocalDate ld9 = LocalDate.of(2099,12,12);
 
        //判断2个日期对象是否相等,在前还是在后
        System.out.println(ld8.equals(ld9));    //true
        System.out.println(ld8.isAfter(ld));    //true
        System.out.println(ld8.isBefore(ld));   //false
    }
}

运行结果:

其他两个类的API用法其实是几乎和这个一样的,只是由于展示的信息不同,所以可以操作的数据的量不同。

LocalDateTime的不同

LocalDateTime稍微会有点不一样,它是包含了所有的日期信息:

它是可以转换成LocalDate对象或者LocalTime对象的

常用API总结

LocalDate的常用API(都是处理年、月、日、星期相关的

图片.png

图片.png

LocalTime的常用API都是处理时、分、秒、纳秒相关的

方法名 说明
public int getHour() 获取小时
public int getMinute() 获取分
public int getSecond() 获取秒
public int getNano() 获取纳秒

图片.png

LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒等信息 图片.png


END


目录
相关文章
|
存储 安全 Java
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
本文介绍了JDK 21中引入的外部函数和内存API(MemorySegment),这些API使得Java程序能够更安全、高效地与JVM外部的代码和数据进行互操作,包括调用外部函数、访问外部内存,以及使用不同的Arena竞技场来分配和管理MemorySegment。
810 2
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
446 11
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
957 11
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
570 24
|
存储 Java API
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)
201 2
|
Java
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
273 1
|
Oracle Java 关系型数据库
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
479 0