java计算两个日期之间相差天数和相隔天数详解

2023-11-17

        大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,”相差“和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为一个偶然的机会,一个项目运行几年却没有人发现,我在其中还不到一年,一开始写这些这代码的人根本没分清楚什么情况就写了,怪不得统计的数据总是有那么细微的差别,在于日期”相差“和"相隔"有某些特定的情况下是相等的,有时又不相等。大家看我写那么多也是醉了。下面直接进入正题。


  • 两个日期之间相差天数

    平时大家都在讨论两个日期之间相差天数,网上大把代码也是关于两个日期之间相差天数,因为相差在人的脑中已经根深了,在我管理的工程里也有这样的代码,如下所示

public static int getDiscrepantDays(Date dateStart, Date dateEnd) {
		return (int) ((dateEnd.getTime() - dateStart.getTime()) / 1000 / 60 / 60 / 24);
	}

这个方法的功能就是传入开始和结束日期,计算相差的天数,实现思路是通过java.util.Date类的getTime()方法获得日期的毫秒数,

然后相减dateEnd.getTime() - dateStart.getTime(),得到毫秒数的差,除以1000,得到秒数的差;再除以60,得到分钟数的差;再除以60,得到小时数的差;再除以24小时,得到天数的差。这就是计算两个日期之间相差天数的思路。网上大部分代码都和这个大同小异,下面重点解决下两个日期之间相隔天数。


  • 两个日期之间相隔天数

相隔并不是相差,只要是同一天,相隔就是0,不是同一天,相隔就不是0,但对于两日期相差的天数就不一样,不是同一天,相差天数也可以为0.

相差天数例子,

开始日期为:2015-05-28 23:59:59,结束日期为:2015-05-29 00:00:00,相差为1秒,相差天数为0,

开始日期为:2015-05-28 11:00:00,结束日期为:2015-05-29 10:59:59,相差天数也为0,差1秒,相差天数为1。

相隔天数例子,

开始日期为:2015-05-28 23:59:59,结束日期为:2015-05-29 00:00:00,相差为1秒,相隔天数为1,

开始日期为:2015-05-28 11:00:00,结束日期为:2015-05-29 10:59:59,相差天数也为0,差1秒,相隔天数还是为1。

到这里,读者应该知道区别在那里了吧,如果用相差天数的思路求相隔天数必然是错的。


相隔天数的代码如下:



相隔天数的代码只要变通下,格式化加上时间,就变成了计算相差天数的代码:



到这里,计算两个日期之间相差天数和相隔天数实现代码已讲完。如果统计的日志数据生成在不同天的表两种方法得到结果决然不同,对于几百万级表的信息查询,得到的结果相差就非常大了。所有开发时要根据自己的业务慎重选择合适的计算方法。只能说细节决定成败!有用的话希望大家分享分享。









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java计算两个日期之间相差天数和相隔天数详解 的相关文章

随机推荐

  • Adapter:适配器模式

    Adapter模式用于令接口不兼容的类可以一起工作 Adapter本身用于适配这些不兼容的类 如 现在有一个需求 需要使用标准类接口 而现有类功能可以实现 但是接口并非标准 于是 可以使用一个Adapter 将现有类的接口转换为标准接口 从
  • SpringMVC入门指南

    目录 前言 一 什么是SpringMVC 二 MVC架构模式 三 SpringMVC的工作流程 四 SpringMVC核心组件 五 SpringMVC的优势 六 SpringMVC的配置与常用注解 七 SpringMvc请求处理流程 控制器
  • QT QStringList 用法

    QStringList类提供了一个字符串列表从QList
  • python实现词云

    python实现词云 制作说明 使用python制作词云需要导入WordCloud库 该库是python中的一个非常优秀的词云展示第三方库 此外 为了能够在python中显示中文字符 还需下载 安装另一个库 jieba库 该库也是一个pyt
  • 文件搜索工具Everything

    Everything是由voidtools开发的一款文件搜索工具 这款软件是基于名称实时定位文件和目录 Everything功能强大 体积小巧 第一次安装使用时会建立一个索引数据库 将所有文件和文件夹的名称导入其中 后续使用能够以极快的速度
  • 动态链接库的创建和调用

    1 CManageCounter h 头文件 TEMPLATEDLL EXPORTS 在 配置属性 gt c c gt 预处理器 gt 预处理定义 注 自己命名 ifdef TEMPLATEDLL EXPORTS define TRADEG
  • 大一c语言选择题库及答案,c语言选择题(大一c语言编程题库)

    第一个结果是1 因为c语言中没有布尔类型 把1当作true 0当作false 看第一题 是逻辑与运算符 返回结果只会是1或0 即真或假 x 15结果大于1 被认为是真 C语言中 对文件操作的一般步骤是 A 打开文件 gt 操作文件 gt 关
  • Suricata + Wireshark离线流量日志分析

    目录 一 访问一个404网址 触发监控规则 1 使用python搭建一个虚拟访问网址 2 打开Wireshark 抓取流量监控 3 在Suricata分析数据包 流量分析经典题型 入门题型 题目 Cephalopod 图片提取 进阶题型 题
  • Java中的异常

    异常Exception 是指程序运行时 由于输入错误 网络 程序逻辑等原因导致运行时出现的问题 出现异常时 程序会暂时中断执行 并根据产生异常的原因 创建对应异常类型的异常对象 并抛出给JVM捕获处理 1 Java中的常见异常 1 Null
  • HTML5 简介及基础教程

    什么是 HTML5 HTML5是一种用于创建Web页面和应用程序的标记语言 是HTML的第五个版本 HTML5是由万维网联盟 W3C 和网络超文本应用技术工作组 WHATWG 共同开发的 并于2014年10月推出了最终版本 HTML5包括一
  • WebRTC源码架构浅析

    http www oschina net question 35855 121850
  • 【Python基础】Python简介

    开篇 从本篇文章开始 笔者将带着大家一起学习Python的入门基础知识 自从人工智能 大数据行业的兴起 Python变得炙手可热 成为了近几年最流行的语言之一 2018年 Python 语言上升了 3 62 其次是Visual Basic
  • AI算法工程师

    目录 机器学习 概率图模型 之 隐马尔可夫模型 HMM 一 马尔科夫链 二 HMM 的基本概念 1 HMM 背景与定义 2 HMM 的两个基本假设 3 确定 HMM 的两个空间和三组参数 三 HMM 三个基本问题 导图 四 HMM 相关算法
  • BLE MESH在配网广播中的Service UUID:1827与1828

    Mesh Provisioning UUID 1827 是一种服务的UUID 一般在广播包中中代表设备为未配网设备 也用于给配网器进行识别 在该服务下还有两个UUID 0x2ADB 用于写 0x2ADC 用于上报 在使用GATT配网阶段的数
  • java stack训练(1)

    有效的括号 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 class Solution public boolean isValid String s if
  • proteus 8.8 sp1 (含汉化、破解)安装方法

    若是按照此方法存在问题 欢迎大家留言评论 一 下载地址 链接 https pan baidu com s 1VtYO2dwKRV bMSG6xy6OEQ 提取码 pp9q 二 软件介绍 proteus软件在单片机仿真上面比较优越 8 6版本
  • linux与centos的关系

    首先大家应该都知道 操作系统主要分3个部分 分别是 内核 库 应用程序 内核主要管理与硬件的直接交互的原语代码就类似dao层的一个方法 是原子性的 而库是对内核的进一步封装 当一个功能需要多个原语时 就比如有的程序 需要键盘的输入 还需要显
  • UTSC-TK2016工具集使用笔记

    1 Pcap2Session ps1 对原始流量文件进行切分 以会话 所有层 会话 应用层 流 所有层 流 应用层的形式对原始流量文件进行切分 删除文件长度为0的数据 删除重复文件 生成2 Session文件夹 2 ProcessSessi
  • 数据结构实训-学生信息管理程序C语言版

    问题描述 学生信息包括 学号 姓名 年龄 性别 出生年月 地址 电话和 E mail等 试设计一个学生信息管理程序 实现学生信息的电子化管理 要求 使用文件方式存储数据 采用链表组织学生数据 基本要求 2 基本要求 系统以菜单方式工作 学生
  • java计算两个日期之间相差天数和相隔天数详解

    大家看到文章标题 两个日期之间相差天数和相隔天数 是否有疑惑呢 从中文字面理解 相差 和 相隔 是有区别的 然而就是这些区别害死很多人 却没有发现 在大量新增统计时是差之毫厘谬以千里 我能都发现是因为一个偶然的机会 一个项目运行几年却没有人