目录

1. 概述

2. 使用案例

2.1 SimpleDateFormat

2.2 ChronoUnit

2.3 Duration

2.4 Calendar

2.5 Period


1. 概述

最近需要通过Java计算两个日期相差的天数,查了一些资料总结了以下的几个方法。

源码可以参考:springboot-test

从下面的测试结果来看,我比较倾向用Period。

2. 使用案例

2.1 SimpleDateFormat

1) 源码。

public static void calculateTimeDifferenceBySimpleDateFormat(String fromDate, String toDate) throws ParseException {SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");/*天数差*/Date fromDate1 = simpleFormat.parse(fromDate);Date toDate1 = simpleFormat.parse(toDate);long from1 = fromDate1.getTime();long to1 = toDate1.getTime();int days = (int) ((to1 - from1) / (1000 * 60 * 60 * 24));System.out.println("两个时间之间的天数差为:" + days);/*小时差*/Date fromDate2 = simpleFormat.parse(fromDate);Date toDate2 = simpleFormat.parse(toDate);long from2 = fromDate2.getTime();long to2 = toDate2.getTime();int hours = (int) ((to2 - from2) / (1000 * 60 * 60));System.out.println("两个时间之间的小时差为:" + hours);/*分钟差*/Date fromDate3 = simpleFormat.parse(fromDate);Date toDate3 = simpleFormat.parse(toDate);long from3 = fromDate3.getTime();long to3 = toDate3.getTime();int minutes = (int) ((to3 - from3) / (1000 * 60));System.out.println("两个时间之间的分钟差为:" + minutes);
}
@Test
public void calculateTimeDifferenceBySimpleDateFormatTest() throws ParseException {DateUtil.calculateTimeDifferenceBySimpleDateFormat("2022-08-01 12:00", "2022-08-12 12:00");
}

2) 测试结果。

2.2 ChronoUnit

1) 源码。

public static void calculateTimeDifferenceByChronoUnit() {LocalDate startDate = LocalDate.of(2020, Month.MAY, 9); // 2020/05/09System.out.println("开始时间:" + startDate);LocalDate endDate = LocalDate.of(2024, Month.JANUARY, 26); // 2024/01/26System.out.println("结束时间:" + endDate);long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);System.out.println("两个时间之间的天数差为:" + daysDiff);
}
@Test
public void calculateTimeDifferenceByChronoUnitTest() {DateUtil.calculateTimeDifferenceByChronoUnit();
}

2) 测试结果。

2.3 Duration

1) 源码。

public static void calculateTimeDifferenceByDuration(int seconds, int days) {Instant inst1 = Instant.now();System.out.println("当前的时间:" + inst1);Instant inst2 = inst1.plus(Duration.ofSeconds(seconds));     //当前时间+seconds秒后的时间System.out.println("当前时间+" + seconds + "秒后的时间:" + inst2);Instant inst3 = inst1.plus(Duration.ofDays(days));       //当前时间+days天后的时间System.out.println("当前时间+" + days + "天后的时间:" + inst3);System.out.println("以毫秒计的时间差:" + Duration.between(inst1, inst2).toMillis());System.out.println("以秒计的时间差:" + Duration.between(inst1, inst3).getSeconds());
}
@Test
public void calculateTimeDifferenceByDurationTest() {DateUtil.calculateTimeDifferenceByDuration(10, 10);System.out.println("--------------------");DateUtil.calculateTimeDifferenceByDuration(120, 120);
}

2) 测试结果。

2.4 Calendar

1) 源码。

public static void calculateTimeDifferenceByCalendar(String strDate) throws ParseException {SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");Date date = formatter.parse(strDate);Calendar c1 = Calendar.getInstance();Calendar c2 = Calendar.getInstance();c2.setTime(date);int year = c1.get(Calendar.YEAR);int oldYear = c2.get(Calendar.YEAR); // 当前日期System.out.println("传入的日期与今年的年份差为:" + (year - oldYear));
}
@Test
public void calculateTimeDifferenceByCalendarTest() throws ParseException {DateUtil.calculateTimeDifferenceByCalendar("2021/04/01");
}

2) 测试结果。

2.5 Period

1) 源码。

public static void calculateTimeDifferenceByPeriod(int year, int month, int dayOfMonth) {LocalDate today = LocalDate.now();System.out.println("现在日期:" + today);LocalDate oldDate = LocalDate.of(year, Month.of(month), dayOfMonth);System.out.println("输入:" + oldDate);Period p = Period.between(oldDate, today);System.out.printf("输入的日期距离今天的时间差:%d 年 %d 个月 %d 天\n", p.getYears(), p.getMonths(), p.getDays());
}
@Test
public void calculateTimeDifferenceByPeriodTest() {DateUtil.calculateTimeDifferenceByPeriod(2022, 8, 1);System.out.println("--------------------");DateUtil.calculateTimeDifferenceByPeriod(2023, 8, 1);
}

2) 测试结果。

Java计算日期时间差的工具类总结相关推荐

  1. java中日期计算时间差,用java计算日期/时间差

    用java计算日期/时间差 我也想计算两个日期之间的差额以小时/分钟/秒为单位. 我的代码有一个小问题,就是:String dateStart = "11/03/14 09:29:58&qu ...

  2. java 计算日期时间差_Java计算日期和时间差

    这篇文章将使用两个例子计算两个日期的时间差. 1.使用Java SDK. 2.使用Joda库. 1.使用Java SDK 计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算 ...

  3. Java时间戳与日期格式转换工具类

    Java时间戳与日期格式转换工具类 在做web开发时,有时候需要用到时间戳,在前台进行日期转换,从数据库中取出来是日期格式的,这里记录下使用的转换工具类(这些都是静态方法,通过类名.方法的形式即可调用 ...

  4. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 日期格式化 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在J ...

  5. java web 项目 常用 小工具类 ~~~~

    java web 项目 常用 小工具类 ~~~~ 一 .DateUtil  日期工具类 package com.devframe.common.util;import java.text.Simple ...

  6. java inputtools_Java后台开发常用工具类

    本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数据库连接.格式转换.文件操作.发送邮件等等.提高开发效率,欢迎收藏与转载. 数据库连接工具类 数据库连接工具类--仅仅获得连接对象 ...

  7. java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)

    依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...

  8. Java版CRC8和CRC16工具类

    搞物联应用,通信时常用CRC校验.下面是Java版的CRC算法工具类,可直接使用. CRC8工具类 public class CRC8Util {static byte[] crc8_tab = {( ...

  9. 分享一个Java生成二维码工具类

    分享一个Java生成二维码工具类 直接上代码: 1.CodeUtil.class package top.lrshuai.blog.util;import java.awt.BasicStroke; ...

最新文章

  1. 黑客都用Python?学习Python的4个理由!
  2. centos7 安装无线工具包wireless-tools 包含 iwlist,iwconfig命令
  3. r 多元有序logistic回归_R语言多元Logistic逻辑回归 应用案例
  4. NIO原理及案例使用
  5. 2021-01-20 Matlab画图技巧与实例:堆叠图stackedplot
  6. 关于抢红包的_抢红包系统设计与设计
  7. java 正则 小数_详解Java判断是否是整数,小数或实数的正则表达式
  8. 计算机专硕没有宿舍,没有补贴,不提供宿舍,读研究生还要家里支持,应届生读非全太难...
  9. servlet html登录,Servlet实现用户登录
  10. npm run build 报错 versionRequirement: packageConfig.engines.node 'node' of undefined
  11. mac软件意外退出怎么解决_Mac 软件常见问题解决方法汇总
  12. Webpack配置问题
  13. 拷贝构造函数——防篡改
  14. 【深度长文】中国电子商务简史:1999-2019
  15. CSP-S2022游记
  16. 数据结构与算法复习第一弹(快速排序)
  17. 计算机无法打开文档,电脑word文档打不开怎么办【原因分析及解决方法】
  18. 《阿里巴巴Java开发手册(正式版)》--安全规约
  19. CAD软件几何数据存储原理
  20. 【认识硬件】之 水泥电阻

热门文章

  1. 晚上下班之后可以做什么副业,业余时间需要利用起来
  2. 究竟是什么造就了王老吉杞余堂的成功?
  3. VC创建进程CreateProcess的方法
  4. TIA(Text Image Augmentation) + LtA(Learn to Augmentation):文本图像扩增工具 + 学习生成更有效的训练样本
  5. docker(虚拟化,沙箱(沙盒),简介,docker和vm的区别,安装,基本操作,基本使用) 镜像的操作 容器的操作 使用mysql镜像 使用canda创建虚拟环境
  6. Linux tail 指令介绍
  7. 有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?
  8. 【五分钟会,半小时懂】人声分离Demucs
  9. 代理申请专利流程是怎么样的?
  10. android audiorecord 简单 使用,Android AudioRecord 的使用