Java计算日期相差天数的几种方法

news2024/9/24 19:21:33

Java计算日期相差天数的几种方法

  • 🗓️ Java计算日期相差天数的几种方法
    • 摘要
    • 引言
    • 一、使用`java.util.Date`和`java.util.Calendar`📅
      • 1. 使用`java.util.Date`
        • 示例代码
      • 2. 使用`java.util.Calendar`
        • 示例代码
    • 二、使用`java.time.LocalDate`📆
      • 示例代码
    • 三、使用Joda-Time库📅
      • 示例代码
    • 🤔 QA环节
    • 表格总结📊
    • 总结📝
    • 未来展望🔮
    • 参考资料📚

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
《java 专栏》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


🗓️ Java计算日期相差天数的几种方法

在Java编程中,处理日期和时间是常见的需求之一。本文将详细介绍几种计算日期相差天数的方法,并提供具体的代码示例和注释,帮助你在项目中更好地处理日期计算。

摘要

大家好,我是默语。在这篇博客中,我们将探讨Java中几种计算日期相差天数的方法,包括使用java.util.Datejava.util.Calendarjava.time.LocalDate以及第三方库如Joda-Time。通过详细的代码演示和注释,让你全面掌握这些技巧,提升开发效率。✨

引言

日期计算在许多应用场景中都至关重要,例如任务调度、数据分析和财务计算。在Java中,有多种方式可以实现日期相差天数的计算。从传统的DateCalendar类到现代的java.time包,再到功能强大的第三方库Joda-Time,每种方法都有其独特的优势和使用场景。

一、使用java.util.Datejava.util.Calendar📅

1. 使用java.util.Date

java.util.Date是Java中最早用于处理日期和时间的类,但其功能相对有限,且设计上有诸多不便。

示例代码
import java.util.Date;

public class DateDifference {
    public static void main(String[] args) {
        try {
            Date date1 = new Date(2023 - 1900, 5, 1); // 2023年6月1日
            Date date2 = new Date(2024 - 1900, 5, 1); // 2024年6月1日
            
            long differenceInMilliseconds = date2.getTime() - date1.getTime();
            long differenceInDays = differenceInMilliseconds / (1000 * 60 * 60 * 24);

            System.out.println("相差天数: " + differenceInDays);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 使用java.util.Calendar

java.util.Calendar提供了比Date更丰富的日期和时间处理功能。

示例代码
import java.util.Calendar;

public class CalendarDifference {
    public static void main(String[] args) {
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(2023, Calendar.JUNE, 1);

        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(2024, Calendar.JUNE, 1);

        long differenceInMilliseconds = calendar2.getTimeInMillis() - calendar1.getTimeInMillis();
        long differenceInDays = differenceInMilliseconds / (1000 * 60 * 60 * 24);

        System.out.println("相差天数: " + differenceInDays);
    }
}

二、使用java.time.LocalDate📆

java.time.LocalDate是Java 8引入的新日期API的一部分,提供了更加现代化和简洁的日期处理方式。

示例代码

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class LocalDateDifference {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2023, 6, 1);
        LocalDate date2 = LocalDate.of(2024, 6, 1);

        long differenceInDays = ChronoUnit.DAYS.between(date1, date2);

        System.out.println("相差天数: " + differenceInDays);
    }
}

三、使用Joda-Time库📅

Joda-Time是一个功能强大的第三方日期和时间处理库,虽然Java 8引入了类似的java.time包,但Joda-Time仍然在许多项目中被广泛使用。

示例代码

import org.joda.time.DateTime;
import org.joda.time.Days;

public class JodaTimeDifference {
    public static void main(String[] args) {
        DateTime date1 = new DateTime(2023, 6, 1, 0, 0);
        DateTime date2 = new DateTime(2024, 6, 1, 0, 0);

        int differenceInDays = Days.daysBetween(date1, date2).getDays();

        System.out.println("相差天数: " + differenceInDays);
    }
}

🤔 QA环节

问:为什么选择java.time而不是java.util.DateCalendar

答:java.time提供了更简洁和直观的API设计,避免了许多DateCalendar类中的缺陷和混淆。它的不可变性和线程安全性使得它在现代开发中更受欢迎。

问:Joda-Time还有必要使用吗?

答:尽管java.time包在Java 8之后已经满足大部分需求,但在一些遗留项目中,Joda-Time仍然被广泛使用。如果你需要维护这样的项目,掌握Joda-Time依然是有益的。

表格总结📊

方法主要特点示例应用
java.util.Date最早期的日期处理类,简单但功能有限适用于简单的日期计算,但不推荐在新项目中使用
java.util.CalendarDate功能更强,但API设计较为繁琐适用于需要更多日期操作的场景
java.time.LocalDateJava 8引入,简洁直观,功能强大现代Java项目中推荐使用
Joda-Time功能强大的第三方库,类似于java.time在维护旧项目或需要特殊功能时使用

总结📝

在Java中计算日期相差天数的方法有多种选择。从传统的DateCalendar到现代化的java.time包,再到功能强大的Joda-Time,每种方法都有其独特的优势和使用场景。根据项目需求选择合适的日期处理方法,可以大大提升代码的可读性和维护性。

未来展望🔮

随着Java的发展,日期和时间处理将变得更加便捷和强大。持续关注Java的更新和新特性,将有助于我们在实际项目中更好地应用这些技术。

参考资料📚

  1. Java官方文档 - Date类
  2. Java官方文档 - Calendar类
  3. Java官方文档 - java.time包
  4. Joda-Time官方文档

在这里插入图片描述


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述

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

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

相关文章

这13个前端库,帮我在工作中赢得了不少摸鱼时间

前言 平时开发的过程中,常常会使用到一些第三方库来提高开发效率,我总结了自己工作这么久以来经常用到的 13 个库,希望对大家有帮助~ antd 全称应该是Ant Design,这是一个 React 的组件库,旨在提供一套常…

基于springboot实现中国陕西民俗网系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现中国陕西民俗网系统演示 摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c…

内网安全--域渗透准备知识

目录 知识点: 0x01 0x02 0x03 系列点: Linux主机信息收集 windows主机信息收集 知识点: 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档,分享给大家,后续会持续更新...... Redis的数据类型 字符串String String:字符串,可以存储String、Integer、Float型的数据,甚至是二进制数据,一个字符串最大容量是512M 列表…

我理解的“财富真相”……

我理解的“财富真相” 人生富贵一途,年轻时会认为钱特别重要,因为要啥没啥,所以整台好车,或有个安乐窝基本是极限目标理解,其实也想有更多钱,但往远了说就具体目标模糊了,咬牙切齿的谈理想&…

618购物节值得入手哪些数码?值得入手的宝藏数码好物安利!

随着618购物节的到来,数码爱好者们纷纷摩拳擦掌,期待在这个年中大促中寻觅到心仪的数码好物,那么在这个618购物节,有哪些数码产品值得我们入手呢?接下来,就让我们一起盘点那些值得入手的宝藏数码好物吧&…

靠AI创意,变现20w!

文章首发于公众号:X小鹿AI副业 大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 之前X小鹿一直在各…

注册表Windows兼容性设置(AppCompatFlags)

属性 - 兼容性 EXE文件属性中有兼容性标签,当有些老版本软件不能正常运行时经常会调整这里的设置。 image.png 上面的所有选项都写在注册表中,其中“更改所有用户的设置”保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppC…

一步步实现知乎热榜采集:Scala与Sttp库的应用

背景 在大数据时代,网络爬虫技术发挥着不可或缺的作用。它不仅能够帮助我们快速地获取互联网上的信息,还能处理和分析这些数据,为我们提供深刻的洞察。知乎,作为中国领先的问答社区,汇聚了各行各业的专家和广大用户的…

Selenium探险家:驾驭Web自动化的秘籍与实战

Hi,我是阿佑,今天将带大伙们学会如何使用Selenium进行高效的网站测试,如何配置Selenium Grid实现分布式测试,以及如何预测和拥抱自动化测试的未来! 文章目录 1. 引言2. 背景介绍2.1 Selenium概览2.2 Python与Selenium的…

力扣刷题--268. 丢失的数字【简单】

题目描述🍗 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以…

YOLOv5 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…

广义线性chirplet变换【附MATLAB代码】

文章来源:微信公众号:EW Frontier 摘要 时频分析方法是一种刻画信号时变特征的有效工具,在相当长的一段时间内受到了广泛的关注。随着TF算法的发展,许多先进的方法被提出,可以提供更精确的TF结果。但是,不…

第一届 长城杯 总决赛wp

第一届 长城杯 总决赛 - Ahisec 第一阶段 Zip_guessinteger 第一层bkcrack攻击部分明文,注意偏移 ​ ┌──(root㉿Ten)-[~/tools/Misc/bkcrack] └─# ./bkcrack -C zip_guessinteger.zip -c breakthroughentry.txtflag.txt.zip -p 1.txt -o 30 bkcrack 1.6.1 …

Lora理解

Parameter-Efficient Fine-Tuning (PEFT) :节约开销的做法,fine-tune少量参数,而不是整个模型; Low-Rank Adaptation (LoRA) :是PEFT的一种;冻结原参数矩阵,只更新2个小参数矩阵。

面了字节大模型算法岗,太难了。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

音视频开发9 FFmpeg 解复用框架--如何将一个影音文件(mp4文件/wav文件) 最终播放起来

一,播放器框架 二 常用音视频术语 容器/文件(Conainer/File): 即特定格式的多媒体文件, 比如mp4、flv、mkv等。 媒体流(Stream): 表示时间轴上的一段连续数据&#xff0…

基于maxkey接入jeecgboot并实现账户同步

1. 注册应用 1.1 在统一认证中心注册第三方应用 1.1.1 填写应用名和登录地址 1.1.2 填写认证地址授权方式和作用域 1.1.3 选择权限范围并提交 1.2 配置访问权限 1.2.1 指定用户组 1.1.2 选择注册的应用 1.1.3 在单点登录认证页面查看添加的应用 1.3 同步一个第三方应用的账号…

sqlserver的查询(三)

目录 10. group by(分组) 11. having(对分组后的信息过滤) 可能从这里开始,执行顺序越来越显得重要了!!! 10. group by(分组) 这个查询相比前面会有一些困难; 格式:group by 字段的集合; 功…

.NET调用阿里云人脸识别1:1简易流程保姆级教学

需要注意的是,以下内容仅限基础调用 人脸比对1:1 功能说明 该功能是两张照片对比,比对两张照片是不是同一个人,至于应用到什么场景,可以参考阿里云的官方文档,我这边以大学生项目来说的话,比如员工打卡&a…