当前位置: 首页 > news >正文

【Java】两个日期相减等于天数

目录

  • 需求
  • 实现
    • 方式一
    • 方式二
  • 注意

需求

根据当前时间 如:2020-10-13 减去过去的某一天 如:2020-09-30

实现

方式一


      // 定义项目进行天数
      long Days = 0;
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

      try {
          long time = sdf.parse("2021-01-19").getTime();
          long time1 = sdf.parse("2020-10-12")
              .getTime();
          Days = (int) ((time -time1) /(24
                        * 60 * 60 * 1000));
              } catch (ParseException e) {
          e.printStackTrace();
        }

方式二

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;

public class TestDay {


    public static void main(String[] args) {

        String dateStr1 = "2020-09-30";
        String dateStr2 = "2021-01-12";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        try {
            dateStr1 = sdf.format(sdf2.parse(dateStr1));
            dateStr2 = sdf.format(sdf2.parse(dateStr2));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long time1 = time(dateStr1);
        long time2 = time(dateStr2);

        // 相减得出的天数mills
        long mills = time1> time2
                ? time1 - time2
                        : time2 - time1;
        System.out.println((int) (mills / 1000 / 3600 / 24));
    }
    // 封装截取字符串
    public  static long time(String times){
        int year = Integer.parseInt(times.substring(0, 4));
        int month = Integer.parseInt(times.substring(4, 6));
        int day = Integer.parseInt(times.substring(6, 8));
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month - 1);
        c.set(Calendar.DAY_OF_MONTH, day);
        return (c.getTimeInMillis());
    }
}

注意

以上两种方式实现都可以,可以试着尝试一下,自己偏向第一种,代码少嘛,自己犯了一个不改犯的问题,导致排查了半天。自己定义yyyy-mm-dd ,mm小写,导致出现负数的情况,在转化的时候出现的问题,M与m的区别 区分 月和分,如:yyyy-MM-dd HH:mm:ss;

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      
      // 自己定义yyyy-mm-dd ,mm小写,导致出现负数的情况,M与m的区别 区分 月和分,如:yyyy-MM-dd HH:mm:ss;
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");

相关文章:

  • spring-boot-starter-web与spring-boot-starter-webflux区别
  • 【后端】nested exception is java.lang.IllegalStateException RequestParam.value() was empty on parameter
  • 1024
  • 【Reactor系列】
  • 【java】判空
  • 【Java】使用idea创建 springboot + gradle项目
  • 【Java】关于Mono与Flux
  • 【Java】SpringBoot 启动requestMappingHandlerMapping没用注入成功
  • NoHttpResponseException: 172.13.10.121:8060 failed to respond (10ms)
  • 【成长之旅】告2020 迎2021
  • 【Spring Boot2】拦截器
  • 【Java】Jackson - ObjectMapper
  • 【Java】根据名称首字母进行排序
  • 【Java】LocalDateTime类
  • 【Java】java8 list去重其中某个相同属性
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • IDEA 插件开发入门教程
  • Js基础知识(一) - 变量
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • MySQL的数据类型
  • React-flux杂记
  • React系列之 Redux 架构模式
  • swift基础之_对象 实例方法 对象方法。
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 蓝海存储开关机注意事项总结
  • 那些被忽略的 JavaScript 数组方法细节
  • 区块链分支循环
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅地使用 Sublime Text
  • 十年未变!安全,谁之责?(下)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • - 转 Ext2.0 form使用实例
  • const的用法,特别是用在函数前面与后面的区别
  • PostgreSQL之连接数修改
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #define 用法
  • #pragma 指令
  • #前后端分离# 头条发布系统
  • (3)(3.5) 遥测无线电区域条例
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (二)c52学习之旅-简单了解单片机
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 未来三学期想要修的课 (日記)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .a文件和.so文件
  • .Net Core webapi RestFul 统一接口数据返回格式