多种方式计算当天与另一天的间隔天数 Java实现

news2025/1/13 10:15:59

        这里不会记录纯原生写法,因为现在基本都是被工具类封装好的,所以会记录好用的工具类来简化开发,当然自己可以研究写一个年月日各自做减法的纯原生工具类。

踩坑处(System.currentTimeMillis)

        这里指的是使用System.currentTimeMillis()方法。此方法是返回当前系统/计算机时间。所以并不是从当天的0时0分0秒开始计时的,个人认为是从当天的晚上最后一刻计数,这里可以去看一下C语言的源码,至于我为什么会这么说,下面会用代码来验证。这里会看得出来输出的天数为0,将"2023-10-27"改为"2023-10-26"后,控制台也是输出0,这里就不做演示了。

public void test() throws ParseException {
    // 由于我写这篇博文是26号 所以这里创建27号的时间
    String time = "2023-10-27";
    // 时间格式化
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
    // 差距天数: 0
    System.out.println("差距天数: " + (System.currentTimeMillis() - date.getTime()) / (1000 * 60 * 60 * 24));
}

踩坑二

        这里也不能直接使用new Date()创建对象是因为其底层直接调用System.currentTimeMillis()方法,所以其实和上面的代码是一个意思,只不过经由Date类进行了一层包装。

public void test() throws ParseException {
    String time = "2023-10-27";
    Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
    // 差距天数: 0
    System.out.println("差距天数: " + (new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
}

踩坑三

public void test() throws ParseException {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = simpleDateFormat.parse("2023-10-27");
    // 差距天数: 0
    System.out.println("差距天数: " + DateUtil.between(new Date(), date, DateUnit.DAY));
}

         对于以上踩坑的原因是因为Date对象会取到时分秒,为了准确的验证时间的差距,必须是0时0分0秒,所以直接采用Date对象来比较必然是不行的。

解决方案一

        将当前时间格式化为字符串再解析为日期(Date -> String -> Date)

public void test() throws ParseException {
    // 获取当前时间
    Date now = new Date();
    // 定义日期格式
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    // 将日期格式化为字符串
    String format = dateFormatter.format(now);
    // 差距天数: -1
    System.out.println("差距天数: " + (dateFormatter.parse(format).getTime() - dateFormatter.parse("2023-10-27").getTime()) / (24 * 60 * 60 * 1000));
}

解决方案二(ChronoUnit)

public void test() {
    LocalDate localDate01 = LocalDate.of(2023, 10, 26);
    LocalDate localDate02 = LocalDate.of(2023, 10, 27);
    // 第一个参数距离第二参数相距的天数
    // 差距天数: 1
    System.out.println("差距天数: " + ChronoUnit.DAYS.between(localDate01, localDate02));
    LocalDateTime localDateTime01 = LocalDateTime.of(2023, 10, 26, 0, 0);
    LocalDateTime localDateTime02 = LocalDateTime.of(2023, 10, 27, 0, 0);
    // 差距天数: 1
    System.out.println("差距天数: " + ChronoUnit.DAYS.between(localDateTime01, localDateTime02));
}

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

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

相关文章

基于 Qt控制开发板 LED和C语言控制LED渐变亮度效果

## 资源简介 在STM32开发板,板载资源上有两个可自由控制的 LED。如下图原理 图其中我们以操作 LED1 为示例,LED1 为出厂系统的心跳指示灯。 ## 应用实例 想要控制这个 LED,首先出厂内核已经默认将这个 LED 注册成了 gpio-leds类型设备。所以我们可以直接在应用层接口直接…

如何通过内网穿透实现公网远程连接Redis数据库

公网远程连接Redis数据库【内网穿透】 文章目录 公网远程连接Redis数据库【内网穿透】前言1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址…

国内主要的ERP软件有哪几种?谁家的ERP软件好用

不同的企业有不同的管理方式和侧重点,随着市场环境的变化,各行业竞争日趋激烈化,如何降低经营成本,提升产品质量,优化资源配置也成为各个企业努力的重点。 有些企业存在部门之间信息传递不及时、多组织协同效率低、不…

Java API访问HDFS

一、下载IDEA 下载地址:https://www.jetbrains.com/idea/download/?sectionwindows#sectionwindows 拉到下面使用免费的IC版本即可。 运行下载下来的exe文件,注意安装路径最好不要安装到C盘,可以改成其他盘,其他选项按需勾选即可…

2023年软件测试还能不能干,怎么干!听听这些肺腑之言!

“怎么办?我似乎连面试都过不了。” 小玲边喝着陪伴她度过无数熬夜的奶茶,边与朋友分享着自己在软件测试行业的求职之路。 被公司裁员后,小玲虽然通过自学掌握了一些基本的接口自动化和UI自动化测试技能,但面试时总还是遭遇到一些…

英伟达携手联发科打造CPU,威胁英特尔主导地位 | 百能云芯

据路透社报道,英伟达(NVIDIA)计划采用安谋(Arm)架构设计中央处理器(CPU),进军个人电脑(PC)市场。外界已指出,联发科是英伟达的合作伙伴&#xff0…

利用Nginx通过内网穿透实现Windows Web多站点远程访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

Redis常用知识笔记(超全面!超详细!)收藏这一篇就够了

这里写目录标题 一、Key二、常见的数据类型1、string (字符串)1-1 常见命令1-2 案例 2、List(列表)2-1 常见命令2-2 案例 3、Hash(哈希)3-1 常见命令3-2 案例 4、Set(集合)元素唯一不重复4-1 常…

msigdbr hallmarks gsea broad研究所

使用msigdbr r包 #BiocManager::install("msigdb") #https://www.gsea-msigdb.org/gsea/msigdb #https://cran.r-project.org/web/packages/msigdbr/vignettes/msigdbr-intro.html #https://bioconductor.org/packages/release/data/experiment/vignettes/msigdb/ins…

vue3 setup语法糖 搜索

目录 前言 用法 1. 区域 前言 Vue.js 是一款流行的 JavaScript 框架,用于构建用户界面。它提供了一种简洁的方式来创建可维护和可测试的前端应用程序。Vue.js 的核心库只关注视图层,易于上手,同时与其他库或现有项目整合也非常方便。Vue…

解决Maven打包Nacos时插件报错

Maven打包指令:mvn clean install -Dmaven.test.skiptrue -Dcheckstyle.skiptrue 在执行时报错,报错信息如下: Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:compile (default) on project nacos-consist…

C语言——有一篇文章,共有 3 行文字,每行有 80 个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数

完整代码&#xff1a; /* 有一篇文章&#xff0c;共有 3 行文字&#xff0c;每行有 80 个字符。要求分别统计出其中英文大写字母、 小写字母、数字、空格以及其他字符的个数*/#include<stdio.h> int main(){//创建一篇这样的文章到二维字符数组中char str[3][80] {&quo…

平面图欧拉公式

V − E P B 1 V-EPB1 V−EPB1 V V V &#xff1a;点数 E E E&#xff1a;边数 P P P&#xff1a;面数&#xff08;含外面&#xff09; B B B&#xff1a;连通块数量 通过这个我们可以处理网格图中的连通块数量问题 上图中有7个点&#xff0c;8条边&#xff0c;3个面&#x…

小红书推广高客单产品的技巧与方法

小红书作为流量市场的一块洼地&#xff0c;这里汇聚着高净值高月活的年轻女性用户&#xff0c;她们更关注高品质、高口碑的优质产品。 在这样的营销氛围下&#xff0c;越来越多高单价产品将目光聚到这里&#xff0c;通过品牌精准营销&#xff0c;有效提升产品曝光和口碑&#x…

HighCharts点击无响应问题

HighCharts 点击无响应问题 背景介绍 项目需要展示一个小时内日志设备的状态&#xff0c;由于数据量比较大&#xff0c;使用echarts效果不好。于是采用highcharts来处理显示。highcharts使用起来很方便&#xff0c;还有打印照片功能&#xff0c;相当满意。这里采用官网给的例…

jsp初学

指令标识 html java代码 out内置对象,直接拿过来用 注释 <%-- 注释内容 --%>:JSP提供了隐藏注释&#xff0c;隐藏注释不仅在浏览器页面中看不到&#xff0c;在查看HTML源代码时也看不到 动态注释,网页看不到,只能看源码<!-- <%new Date()%> --> 指令 …

springboot配置redis、Spring cache

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

【ceph】ceph集群的节点机器重启,导致磁盘的lvm消失,如何恢复呢~~满满的都是干货

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

用python写一个俄罗斯方块程序

用python写一个俄罗斯方块程序 1.源代码2.游戏运行 1.源代码 import pygame import random# 初始化游戏 pygame.init()# 游戏窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600# 方块大小和颜色 BLOCK_SIZE 30 COLORS [(0, 0, 0), # 黑色(255, 0, 0), # 红色(0, 255, 0), #…

补码为什么要+1

关于补码的文章&#xff0c;csdn上面遍地都是&#xff0c;所以我们大可不必搬运别人的文章来装点门面&#xff0c;我写这篇博客是想补充一个问题“补码为什么要1”的问题&#xff0c;这个问题&#xff0c;博客园有个叫张子秋的文章写的很好&#xff0c;但是最后对补码为什么1的…