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。
730 1
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
409 11
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
864 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 API 数据处理
【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第3天】前端开发中的异步基石:AJAX与Fetch。AJAX,使用XMLHttpRequest,处理跨域、回调地狱和错误处理。Fetch,基于Promise,简化请求,但需注意默认无跨域头和HTTP错误处理。两者各有优劣,理解其问题与解决策略,能提升前端应用的性能和用户体验。
545 24
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
Java
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
245 1