Java计算两个日期的相差天数

  • 计算两个日期相差天数
    • Java1.8新类LocalDateTime
    • 计算相差天数
  • 计算两个日期相差天数(除去双休日)

计算两个日期相差天数

Java1.8新类LocalDateTime

这次用到的时间类是LocalDateTime,它与Java其他的时间类不同的是,LocalDateTime是不储存时区数据的。因此,LocalDateTime也无法转化成时间戳格式。

计算相差天数

因为本文的计算天数,不考虑时分秒带来的影响。因此,我们不需要用LocalDateTime精度这么高的时间类,我们只需要用LocalDate即可。
LocalDateTime转成LocalDate的方法也很简单,代码如下:

LocalDateTime startTime = LocalDateTime.now();
LocalDate start = startDate.toLocalDate();

如果大家去百度的话,会发现很多的博客都会告诉大家用Period这个类的between()方法来计算相差的天数。但是这个方法只能用于同一个月内的天数相减。
但是通过查看LocalDate的源码,发现了另外一种计算相差天数的方法。LocalDate中有一个方法叫做toEpochDay(),它是将LocalDate中的时间,转换成距离1970年1月1日的天数,源码如下:

@Overridepublic long toEpochDay() {long y = year;long m = month;long total = 0;total += 365 * y;if (y >= 0) {total += (y + 3) / 4 - (y + 99) / 100 + (y + 399) / 400;} else {total -= y / -4 - y / -100 + y / -400;}total += ((367 * m - 362) / 12);total += day - 1;if (m > 2) {total--;if (isLeapYear() == false) {total--;}}return total - DAYS_0000_TO_1970;}

以后也可以用这个方法去计算其他与日期相关的问题,可以说这个方法也非常的巧妙。
因此,我们只需要将结束日期的LocalDate调用这个函数减去开始日期的值即可:

public  long diffFromDate(LocalDateTime startDate, LocalDateTime endDate){LocalDate start = startDate.toLocalDate();LocalDate end = endDate.toLocalDate();long res = end.toEpochDay()-start.toEpochDay();return res;}

计算两个日期相差天数(除去双休日)

首先可以将问题简化一下,可以知道,不论开始、结束日期,只要经过7天,必定就有两天是周末。因此问题可以简化为,一周内的双休日天数+周数*2.

public int checkWeekendDay(int startDate, int endDate, int days){int weekEndCount = 0;if (days<1){if (startDate==6 || startDate==0){weekEndCount+=1;}} else {weekEndCount+=(days/7)*2;weekEndCount+=calculateWeekendDays(startDate,endDate);}return weekEndCount;}public int calculateWeekendDays(int startDate, int endDate){int weekendCount=0;if (startDate==0&&endDate==6) {weekendCount += 2;}else if (startDate<endDate&&endDate==6){weekendCount+=1;}else if (startDate<endDate&&startDate==0){weekendCount+=1;}else if (startDate>endDate){weekendCount+=2;}if (startDate==endDate){if (startDate==6||endDate==0){weekendCount+=1;}}return weekendCount;}

Java计算两个日期的相差天数以及除去双休日的相差天数相关推荐

  1. JAVA计算两个日期相差多少天

    前言 有时候我们在JAVA中会比较两个日期相差多少天,这里有几个实现方法供大家参考,偶尔会用到,也当做自己收藏.btw,同时也要鄙视一下我的好基友从百度搜到的一个答案的作者,写了毒代码,计算个日期而已 ...

  2. java计算两个日期之间天数

    java计算两个日期之间天数 jxts = DateFunction.getNumberOfDays(jxErq, qsjxrq); public static long getNumberOfDay ...

  3. Java 计算两个日期相减并转换成月份

    来自:https://www.shixinwl.com/article/132 Java 计算两个日期相减并转换成月份 在网上找了很多类似方法结果都是垃圾,于是乎记录下来给需要的人 import ja ...

  4. Java 计算两个日期相差的天数

    本文转自http://takeme.iteye.com/blog/1678179,所有权力归原作者所有. Java代码   import java.text.ParseException; impor ...

  5. java计算两个日期之间相差的天数的四种方法

    计算两个日期之间相差的天数的四种方法 第一种:时间戳的方式,计算两个日期的时间戳的差,再除当天的毫秒数即可得到相差的天数. public static void main(String[] args) ...

  6. java 计算两个日期相差月数_Java简单计算两个日期月数差的方法

    本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @ ...

  7. java 计算两个日期之间的差的天数

    1. 计算相差天数 /*** 获取两个日期相差的天数** @param startDateStr* @param endDateStr*/public static int getDayBetween ...

  8. java计算两个日期之间的天数(java计算两个日期之间的天数算法)

    两个日期之间的天数要怎么计算? 两个日期之间的天数的计算=日期相减+1.比如:六月一号到六月三号,这之间是3天,分别是:一号.二号.三号,算式:3-1+1=3(天).同理,2001年到2002年是2年 ...

  9. java 计算 两个日期 相差多少天

    2020-11-11 13:34:29 date1="1987-01-01" date2="2010-01-01" import java.text.Parse ...

最新文章

  1. 技术人员,为什么会苦逼
  2. 现代软件工程 2012 北航 项目复审模板
  3. 【重难点】【Java基础 07】变量类型、内部类、处理器指令优化
  4. java supplier_Java 函数式编程
  5. 服务器安装mysql文档_Linux 服务器安装MySQL数据库
  6. 微言Netty:分布式服务框架
  7. 将Unity项目改为aar模块
  8. 2019最新某私塾在线高级java软件架构师实战培训教程
  9. 《OpenGL编程指南》 笔记一 OpenGL概述
  10. python集合排序_集合排序python
  11. MATLAB命令总结
  12. linux导航改端口波特率,各大导航端口速率修改方法
  13. freemarker word模板导出图片循环
  14. 从rman 备份中恢复表
  15. 百度地图海量点位渲染造成卡顿问题解决
  16. 【老生谈算法】matlab实现高通滤波器源码——高通滤波器
  17. 精致蓝色科技感5G新时代PPT模板
  18. 白色简洁网站html模板,白色简洁形式pc+wap个人作品集网页模板代码
  19. uniapp项目打包为桌面应用的方法步骤
  20. 有向完全图和强连通图的区别?

热门文章

  1. CSRF(Cross-Site Request Forgery) 跨站请求伪造
  2. 【原创】ThinkpadX240更换三键触摸板注意事项
  3. 2018.10.16 NOIP模拟 长者(主席树+hash)
  4. JAVA虚拟机程序计数器
  5. java中的printwriter_Java中的PrintWriter与FileWriter
  6. %s在c语言中有什么作用,c语言中%s的用法
  7. 【UWB】MSE 均方误差、RMSE 均方根误差
  8. 天使投资人李治国:谈创业
  9. csdn最牛“首发”性能测试系类文章---jmeter性能测试从理论基础到项目搭建【3-1】
  10. 【知识分享】你不了解的键盘功能键