Java中的时间日期类⭐️通过具体案例分析下开发中常用到的几种时间日期格式类的使用

小伙伴们大家好,系统中不少模块都要用到时间日期,来分析总结下项目中用到的些日期类

目录

一、时间日期类

        1.java.util.Calendar:

        2.java.util.Date:

        3.java.time.LocalDate、java.time.LocalTime、java.time.LocalDateTime:

二、代码样例

        2.1 LocalDate测试

        2.2 Instant测试

三、实战使用案例

​编辑

 章末


一、时间日期类

        ​​​​​​​1.java.util.Calendar

Calendar类提供了一个抽象的日历类,可以进行日期和时间的计算、格式化等操作。与Date类相比,Calendar类提供了更多的功能,并且可以处理时区等问题。但是,Calendar类在设计上存在一些缺陷,使用起来较为繁琐,例如:

  • Calendar类的API设计比较复杂,容易出错。
  • Calendar类的实现不是线程安全的,需要进行额外的同步处理。
  • Calendar类的性能比较低,因为它需要进行大量的计算。
        2.java.util.Date

Date类是Java最早引入的日期时间类,用于表示特定的时间点。它的内部实现是一个长整型数值,表示自1970年1月1日00:00:00 GMT以来经过的毫秒数。由于其内部实现的限制,Date类存在一些问题,例如:

  • Date类中的很多方法已经被废弃,不建议使用。
  • Date类不提供时区支持,因此在涉及跨时区的应用中会出现问题。
  • Date类的精度只能到毫秒级别,无法表示更精确的时间戳。
        3.java.time.LocalDatejava.time.LocalTimejava.time.LocalDateTime

LocalDateLocalTimeLocalDateTime是Java 8引入的新的日期时间类。它们分别用于表示日期、时间和日期时间。这些类提供了丰富的方法来进行日期时间的操作和计算,并且处理时区等问题更加方便。与Calendar类相比,java.time包下的日期时间类具有以下优点:

  • 设计简洁,API清晰易懂,使用起来更加方便。
  • 所有的日期时间类都是不可变的,线程安全,可以避免并发问题。
  • 支持时区、夏令时等功能,可以处理跨时区的应用场景。
  • 性能较高,比Calendar类更为快速。

二、代码样例

        2.1 LocalDate测试
public class TimeTest {

    public static void main(String[] args) {
        //获取当前日期
        LocalDate localDate = LocalDate.now();
            //2023-12-21

        //获取日期的年月日
        int year = localDate.getYear();
            //2023
        Month month = localDate.getMonth();
            //DECEMBER
        int dayOfMonth = localDate.getDayOfMonth();
            //21

        //创建指定日期
        LocalDate specialDate = LocalDate.of(2024, 12, 21);
            //2024-12-21
        LocalDateTime specialDateTime = LocalDateTime.of(2023, 12, 21,16,12,30);
            //2023-12-21T16:12:30

        //日期格式化输出
        String formatDate = specialDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            //2023-12-21

        //日期运算,加七天
        LocalDate localDatePlus = specialDate.plusDays(7);
            //2023-12-28

        //判断日期先后
        boolean isBefore = localDatePlus.isBefore(localDate);
            //false

        //日期间隔
        long daysBetween = ChronoUnit.DAYS.between(localDate, localDatePlus);
            //7
    }
}
        2.2 Instant测试
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;

public class InstantTimeTest {
    public static void main(String[] args) {
        //获取当前时间戳
        Instant now = Instant.now();
            //2023-12-21T08:24:31.903Z

        //创建指定时间戳
        Instant milli = Instant.ofEpochMilli(1639999999000L);
            //2021-12-20T11:33:19Z

        //时间戳格式化输出
        String s = milli.toString();
            //2021-12-20T11:33:19Z

        //时间戳与日期时间的转换
        LocalDateTime localDateTime = LocalDateTime.ofInstant(milli, ZoneId.systemDefault());
            //2021-12-20T19:33:19
        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
            //2021-12-20T19:33:19Z

    }
}

三、实战使用案例

        需要计算现在到24年双11之间相隔的天数,并且需要排除周六和周日这两天。

首先,我们可以使用LocalDate类来表示起始日期和结束日期,然后使用循环遍历这两个日期之间的每一天,判断该天是否是周六或周日,如果不是,则将天数加1。

public class SumDays {
    public static void main(String[] args) {
        LocalDate now = LocalDate.of(2023, 12, 21);
        LocalDate end = LocalDate.of(2024, 11, 11);

        int days = 0;
        LocalDate localDate = now;
        while(localDate.isBefore(end) || localDate.isEqual(end)){
            if(localDate.getDayOfWeek() != DayOfWeek.SATURDAY && localDate.getDayOfWeek() != DayOfWeek.SUNDAY){
                days ++;
            }
            localDate = localDate.plusDays(1);
        }
        System.out.println("现在的日期是:"+now+ "  到2024年双11相隔天数(不包括周六周日):"+days);

    }
}

 章末

        文章到这里就结束了 


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Encryptedd@mailfence.com].faust 勒索病毒肆虐:如何恢复被加密的数据文件?

导言: 在网络安全的战场上,[backupsairmail.cc].faust [Deciphermailfence.com].faust[Encrypteddmailfence.com].faust[support2022cock.li].faust [tsai.shenmailfence.com].faust勒索病毒是一种极具破坏性的恶意软件。本文91数据恢复将深入介绍该病毒…

HarmonyOS引导页登陆页以及tabbar的代码说明1

效果 以下代码是东拼西凑出来的。只是为了个人熟悉一下相关模块的使用: 用的知识点: Resouces 此部分分内容可以在项目中找到: resources/base/element/color.json 为项目着色配置,当然也可以正接在代码里写 float.json 为相关…

openGuass:极简版安装

目录 一、openGauss简介 二、初始化安装环境 1.创建安装用户 2.修改文件句柄设置 ​3.修改SEM内核参数 4.关闭防火墙 6.禁用SELINUX 7.安装依赖软件 8.重启服务器 三、安装数据库 1.下载安装包 2.创建安装目录 3.解压安装包 4.执行安装 5.验证安装 四、gsql工具…

压力测试详解

压力测试 压力测试是看当前软硬件环境下系统所能承受的最大负荷,找出系统瓶颈。为了在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 在压力测试,我们希望找到其他测试方法(单元测试)更难发现的错误&a…

《每天一分钟学习C语言·五》

1、 给一个字符数组输入字符串 char arr[10]; gets[arr]; //gets函数接收回车符,如果直接按回车,gets函数会把回车符转变成空字符作为结束,即arr[0]’\0’;2、 文件结尾标志ctrlz表示返回NULL 自己定义的头文件里面一般有宏定义和声明&#…

Linux目录和文件管理

一.Linux目录结构 Linux操作系统在定位文件或目录位置时,使用斜杠“ / ”进行分割(区别于Windows操作系统中的反斜杠“ \ ”)。整个树形目录结构中,使用独立的一个" / "表示根目录,根目录是Linux操作系统文…

MySQL:通过官方mysql server,搭建绿色版mysql服务器(Windows)

1. 官网下载mysql server 下载mysql server的zip文件,地址: https://downloads.mysql.com/archives/community/ 解压后 2. 初始化数据库 运行cmd, 进入bin目录,运行 mysqld --initialize-insecureinitialize-insecure说明如…

【Qt之Quick模块】3. QML类型

概述 Qt QML模块为使用QML语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构,并提供了一个API,使应用程序开发人员能够使用自定义类型扩展QML语言,并将QML代码与JavaScript和c集成在一起。Qt QML模块提供了QML API和c …

python用什么软件编写程序,python编写的软件有哪些

大家好,本文将围绕python用什么软件编写程序展开说明,python编写的软件有哪些是一个很多人都想弄明白的事情,想搞清楚用什么软件编写python需要先了解以下几个事情。 大家好,小编来为大家解答以下问题,python可以用什么…

一文3000字从0到1使用JMeter进行压力测试!

一、压力测试 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错…

【MATLAB】史上最全的25种信号分解算法全家桶

有意向获取代码,请转文末观看代码获取方式~ 1 【MATLAB】EMD 信号分解算法 EMD 是一种信号分解方法,它将一个信号分解成有限个本质模态函数 (EMD) 的和,每个 EMD 都是具有局部特征的振动模式。EMD 分解的主要步骤如下: 将信号的…

软件分享--图片置顶工具

一个好的程序应该只做一件事情,并且将这件事情做好。 使用许多小工具的集合要比使用一个什么都做但什么都做不好的工具要好。 linux系统强大,组成它的是dd、sed、grep、awk、tar等各种命令工具的集合。 如果你能够合理使用各种小工具。效率会比使用任何…

【pentaho】kettle读取Hive表不支持bigint和timstamp类型解决。

一、bigint类型 报错: Unable to get value BigNumber(16) from database resultset显示kettle认为此应该是decimal类型(kettle中是TYPE_BIGNUMBER或称BigNumber),但实际hive数据库中是big类型。 修改kettle源码解决: kettle中java.sql.Types到kettle…

12.21

一、注意事项 1.CtrlShiftT用于从jar中查找类,这个eclipse键盘快捷键可以帮助快速找到类 2.更新upm和rest遇到重复解决方法 把upm文件里面多出来的三行代码删掉,右击upm文件,点击小组,点击标记为已解决,点击OK&#x…

springboot使用Validated实现参数校验

做为后端开发人员,一定有前端传的数据是可能会出错的警惕性,否则程序就可能会出错,比如常遇到的空指针异常,所以为了程序运行的健壮性,我们必须对每一个参数进行合法校验,就能避免很多不必要的错误&#xf…

MyBatis Plus使用遇到的问题

如果想使用Mapper的xxxById()方法,实体类的主键上面必须加上TableId注解,如果不加,会报错 2023-12-21 22:48:33.526 WARN 11212 --- [ main] c.b.m.core.injector.DefaultSqlInjector : class com.example.mybatisplusdemo.dom…

Java最全面试题专题---5、Spring MVC

概述 什么是Spring MVC?简单介绍下你对Spring MVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清…

牛客小白月赛78(C: 第K小表示数)

C-第K小表示数_牛客小白月赛78 (nowcoder.com) 问题: 分析: k的极限是1e6,因此要几乎O(n)的时间复杂度给求出来,还需要每插入一个元素我都要去排序,这个时候set就派上用场了,自带排序和去重,集合里面最小和第二小的一定是min(a…

新闻软文怎么写?才能让用户看得下去

在企业软文推广的过程中,除了常规的行业型软文与用户型软文外,新闻式软文也是企业宣传的常用方式。然而新闻稿虽然可信度强,但是故事性弱用户不一定看得下去,如果无法吸引用户阅读的话,那这篇新闻稿就起不到宣传作用&a…

pip 离线安装:利用pypi网站进行模块 库的离线安装

离线安装是一种很好的方法,在网络不佳、库版本不明确、复杂库本地编译安装报错时,通过whl文件的下载安装,可以很高效的解决问题。 pypi的网站:https://pypi.org/ 这个网站包含各种你 pip install xxx 的库,离线安装可…