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

news2025/1/13 3:04:00

目录

JDK 8新增的时间API 

LocalDate、LocalTime、LocalDateTime

获取对象的方案 

案例演示 

​编辑

LocalDateTime的不同

常用API总结


为什么要学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:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)

获取对象的方案 

方法名示例
public static Xxxx.now():获取系统当前时间对应的该对象LocaDate Id = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime Idt = LocalDateTime.now();
public static Xxxx.of():获取指定时间的对象LocalDate localDate1 = LocalDate.of(2099 , 11,11); 
LocalTime localTime1 = LocalTime.of(9, 8, 59);
LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16,14,30,01);

案例演示 

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(都是处理年、月、日、星期相关的

方法名说明
public int geYear()获取年
public int getMonthValue()获取月份(1-12)
public int getDayofMonth()获取日
public int getDayofYear()获取当前是一年中的第几天
public DayOfWeek getDayOfWeek()获取星期几:ld.getDayofWeek.getValue()
方法名说明
withYear、withMonth、withDayOfMonth、withDayOfYear直接修改某个信息,返回新日期对象
plusYears、plusMonths、plusDays、plusWeeks把某个信息加多少返回新日期对象
minusYears、minusMonths、minusDays, minusweeks把某个信息减多少返回新日期对象
equals、isBefore、isAfter判断两个日期对象,是否相等,在前还是在后

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

方法名说明
public int getHour()获取小时
public int getMinute()获取分
public int getSecond()获取秒
public int getNano()获取纳秒
方法名说明
withHour、withMinute、withSecond、withNano修改时间,返回新时间对象
plusHours、plusMinutes、plusSeconds、plusNanos把某个信息加多少,返回新时间对象
minusHours、minusMinutes、minusSeconds、 minusNanos把某个信息减多少,返回新时间对象
equals、isBefore、isAfter判断2个时间对象,是否相等,在前还是在后

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

方法名说明
getYear、getMonthValue、getDayOfMonth、getDayOfYear获取年月日、时分秒、纳秒等
getDayOfweek、getHour、getMinute、getSecond、getNano
withYear、withMonth、withDayOfMonth、withDayOfYear修改某个信息,返回新日期时间对象
withHour、withMinute、withSecond、withNano
plusYears、plusMonths、plusDays、plusWeeks把某个信息加多少,返回新日期时间对象
plusHours、plusMinutes、plusSeconds、plusNanos
minusYears、minusMonths、minusDays、minusWeeks把某个信息减多少,返回新日期时间对象
minusHours、minusMinutes、minusSeconds、minusNanos
equals、isBefore、isAfterequals isBefore isAfter判断2个时间对象,是否相等,在前还是在后


END


学习自:黑马程序员——JavaSE课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 12 如何加载 native 原生库

在 Android 7.0 及更高版本中,系统库与应用库是分开的。 图1. 原生库的命名空间 原生库的命名空间可防止应用使用私有平台的原生 API(例如使用 OpenSSL)。该命名空间还可以避免应用意外使用平台库(而非它们自己的库)的…

openlayers 入门教程(七):Interactions 篇

目录 ​一、交互功能 二、defaults默认设置 三、使用交互功能 四、简单示例展示 1、draw 示例 2、 modify 示例 3、 select 示例 4、 Drag-and-Drop 示例 5、 DragPan示例 6、 DragZoom 示例 五、Openlayers 入门教程 -系列文章列表 Interaction是用来控制地图的&am…

STM32H7定时器TIM1-TIM17中断、PWM实现

STM32H7定时器TIM1-TIM17中断、PWM实现 高级定时器硬件框图定时器模式时基输出PWM定时器输入捕获 TIM1-TIM17的中断配置TIM1-TIM17的PWM输出 STM32H7 支持的定时器有点多,要简单的区分下。STM32H7 支持 TIM1-TIM8,TIM12-TIM17 共14 个定时器,…

Java | Leetcode Java题解之第36题有效的数独

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isValidSudoku(char[][] board) {int[][] rows new int[9][9];int[][] columns new int[9][9];int[][][] subboxes new int[3][3][9];for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {char …

ThreadLocal 原理及源码详解

什么是ThreadLocal&#xff1f; ThreadLocal 是一种提供线程本地变量&#xff08;也称为线程局部变量&#xff09;的类&#xff0c;这种变量确保了在不同的线程中访问同一个 ThreadLocal 变量时&#xff0c;每个线程会有一个该变量的私有副本&#xff0c;即使多个线程修改了相…

MATLAB环境下基于同步压缩变换重分配算子的瞬时频率估计

瞬时频率是表征非平稳信号特征的重要物理量&#xff0c;已经被广泛应用于桥梁振动检测、地震勘测、机械、电力系统、雷达、通信、医学等各个方面。瞬时频率的概念最早由Carson提出&#xff0c;后来&#xff0c;Gabor提出解析信号的定义&#xff0c;为瞬时频率的研究提供了新的方…

「不羁联盟/XDefiant」4月20号开启服务器测试,游戏预下载安装教程

XDefiant》开启Alpha测试&#xff0c;这是一款免费游玩的快节奏 FPS 竞技游戏&#xff0c;可选择特色阵营&#xff0c;搭配个性化的装备&#xff0c;体验 6v6 对抗或是线性游戏模式。高品质射击竞技端游XDefiant以6v6双边对抗为核心&#xff0c;对局模式分为区域与线性两大类&a…

【Spring】-编程式事务和声明式事务

spring中控制事务的方式有两种&#xff1a;编程式事务和声明式事务&#xff0c;今天我以两种事务出发&#xff0c;对spring中实现事务的EnableTransactionManagement和Transaction两个注解的底层原理进行讨论。 一、编程式事务 什么是编程式事务&#xff1f; 硬编码的方式实现…

数据结构-栈和队列刷题集(长期更新)

文章目录 万能计算器的实现以及源码分析1. leetcode 150 逆波兰表达式求值 万能计算器的实现以及源码分析 /*** 我们尝试写一个完整版的计算器,由于计算机不能很好的识别括号,所以一般要转换为逆波兰表达式求解* 思路解析 :* 1. 输入一个 中缀表达式* 2. 中缀表达式转化为list…

鸡汤笔记-致自己

《你只是看起来很努力》李尚龙 我们看起来每天熬夜&#xff0c;却只是拿着手机点了无数个赞&#xff1b;看起来在图书馆坐了一天&#xff0c;却真的只是坐了一天&#xff1b;看起来买了很多书&#xff0c;只不过晒了个朋友圈&#xff1b;看起来每天很晚地离开办公室&am…

聊聊go语言中的内存填充

写在文章开头 我们都知道数据加载到CPU缓存中可以提升执行性能&#xff0c;所以为了保证每一个结构体中的成员能够完整的被单个CPU核心加载以避免缓存一致性问题而提出内存对齐&#xff0c;这篇文章笔者会从go语言的角度来讨论这个优化机制。 Hi&#xff0c;我是 sharkChili &…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

杀鸡焉用牛刀,用unity3D开发数字孪生是大材小用吗?

"杀鸡焉用牛刀"这句话的意思是指使用过于强大或不适合的工具来完成一个简单的任务。而用Unity3D开发数字孪生并不一定是大材小用。 Unity3D是一款功能强大的游戏开发引擎&#xff0c;它可以用于开发各种类型的游戏和交互应用程序。数字孪生是一种基于现实世界对象的虚…

网络靶场实战-PE 自注入

默认的 Windows API 函数&#xff08;LoadLibrary、LoadLibraryEx&#xff09;只能加载文件系统中的外部库&#xff0c;无法直接从内存中加载 DLL&#xff0c;并且无法正确地加载 EXE。有时候&#xff0c;确实需要这种功能&#xff08;例如&#xff0c;不想分发大量文件或者想增…

Redis入门到通关之解决Redis缓存一致性问题

文章目录 ☃️概述☃️数据库和缓存不一致采用什么方案☃️代码实现☃️其他 ☃️概述 由于我们的 缓存的数据源来自于数据库, 而数据库的 数据是会发生变化的, 因此,如果当数据库中 数据发生变化,而缓存却没有同步, 此时就会有 一致性问题存在, 其后果是: 用户使用缓存中的过…

Python 数据结构和算法实用指南(二)

原文&#xff1a;zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第四章&#xff1a;列表和指针结构 我们已经在 Python 中讨论了列表&#xff0c;它们方便而强大。通常情况下&#xff0c;我们使用 Python…

【C语言__基础概念__复习篇8】

目录 前言 一、C语言是什么 二、C语言的发展历史 三、编译器的选择 3.1 编译和链接 3.2 编译器的对比 3.3 VS如何使用 四、main函数 五、关键字 六、字符和ASCII编码 七、字符串和\0 八、转义字符 九、注释 十、数据类型 10.1 数据类型的介绍 10.2 数据类型大小的计…

有哪些网站设计教程

网站设计教程是帮助人们学习如何设计和开发网站的资源&#xff0c;它们提供了从基础知识到高级技巧的全方位指导。无论您是初学者还是经验丰富的开发者&#xff0c;都可以从这些教程中获益。下面是一些广受欢迎的网站设计教程&#xff0c;它们涵盖了各种技术和工具&#xff1a;…

Linux之进程控制进程终止进程等待进程的程序替换替换函数实现简易shell

文章目录 一、进程创建1.1 fork的使用 二、进程终止2.1 终止是在做什么&#xff1f;2.2 终止的3种情况&&退出码的理解2.3 进程常见退出方法 三、进程等待3.1 为什么要进行进程等待&#xff1f;3.2 取子进程退出信息status3.3 宏WIFEXITED和WEXITSTATUS&#xff08;获取…

【C++题解】1345. 玫瑰花圃

问题&#xff1a;1345. 玫瑰花圃 类型&#xff1a;基本运算、小数运算 题目描述&#xff1a; 有一块nn&#xff08;n≥5&#xff0c;且 n 是奇数&#xff09;的红玫瑰花圃&#xff0c;由 nn 个小正方形花圃组成&#xff0c;现要求在花圃中最中间的一行、最中间的一列以及 4 个…