时间的计算方法 (根据两个时间段判断是否为年,月)

2023-11-05

1.根据两个时间段判断是否为一年 格式(20230206-20240205)

	/* 校验年 格式(20230206-20240205) */
    public Boolean checkYear(Date date1, Date date2){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date1);
        // 把日期往后增加一年
        calendar.add(Calendar.YEAR, 1);
        //把日期往前一天
        calendar.add(Calendar.DATE, -1);
        //如果相同就是一年
        if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
            return true;
        }else{
            return false;
        }
    }

2. 根据两个时间校验是否为一个月 格式(20230206-20230305)

	/* 校验月 格式(20230206-20230305) */
    public Integer checkMonth(Date date1, Date date2){
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date1);
        // 把日期往后增加一月
        calendar.add(Calendar.MONTH, 1);
        //把日期往前一天
        calendar.add(Calendar.DATE, -1);
        //如果相同就是一月
        if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
            return 1;
        }else{
            return 0;
        }
    }

3. 根据两个时间计算月份(不足30天按一个月)

 	/** 参数(开始日期,结束日期) **/
    public Integer calculateContractPeriod(Date date1, Date date2){
    	//判断如果开始时间,结束时间有一个为空直接返回0
        if (ToolUtil.isEmpty(date1)||ToolUtil.isEmpty(date2)){
            return 0;
        }
        //计算天数
        long days = ((date2.getTime() - date1.getTime()) / (1000*3600*24))+1;
        //小于30天 算一个月
        if (days<=30){
            return 1;
        }else{
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date2);
            // 把日期往后增加一天,整数往后推,负数往前移动
            calendar.add(Calendar.DATE, 1);
            // 这个时间就是日期往后推一天的结果
            date2 = calendar.getTime();
            
            Calendar c1 = Calendar.getInstance();
            Calendar c2 = Calendar.getInstance();
            c1.setTime(date1);
            c2.setTime(date2);
            //结束时间小于开始时间直接返回0
            if (c2.getTimeInMillis() < c1.getTimeInMillis()) return 0;
            int year1 = c1.get(Calendar.YEAR);
            int year2 = c2.get(Calendar.YEAR);
            int month1 = c1.get(Calendar.MONTH);
            int month2 = c2.get(Calendar.MONTH);
            int day1 = c1.get(Calendar.DAY_OF_MONTH);
            int day2 = c2.get(Calendar.DAY_OF_MONTH);
            int yearInterval = year2 - year1;
            if (month2 < month1 || month1 == month2 && day2 < day1) yearInterval--;
            int monthInterval = (month2 + 12) - month1;
            if (day2 < day1) monthInterval--;
            monthInterval %= 12;
            int moresu = yearInterval * 12 + monthInterval;
            return moresu;
        }
    }

4. 获取当前时间N天后的时间(字符串)

	/** 获取当前时间N天后的时间 **/
	public String getAfterDayDate(String days) {
		int daysInt = Integer.parseInt(days);

		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateStr = sdfd.format(date);
		return dateStr;
	}

5.获取N天以后是周几

	/* 得到n天之后是周几*/
	public static String getAfterDayWeek(String days) {
		int daysInt = Integer.parseInt(days);
		Calendar canlendar = Calendar.getInstance(); // java.util包
		canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
		Date date = canlendar.getTime();
		SimpleDateFormat sdf = new SimpleDateFormat("E");
		String dateStr = sdf.format(date);
		return dateStr;
	}

6. 获取当前时间的周一和周日的日期

	/*获取当前时间的周一及周日*/
	public Map<String,String> getWeekDate(Date date) {
		Map<String,String> map = new HashMap();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
		cal.setFirstDayOfWeek(Calendar.MONDAY);
		// 获得当前日期是一个星期的第几天
		int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
		if(dayWeek==1){
			dayWeek = 8;
		}
		// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
		cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
		Date mondayDate = cal.getTime();
		String weekBegin = sdf.format(mondayDate);
		//获取星期日
		cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
		Date sundayDate = cal.getTime();
		String weekEnd = sdf.format(sundayDate);
		map.put("mondayDate", weekBegin);
		map.put("sundayDate", weekEnd);
		return map;
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时间的计算方法 (根据两个时间段判断是否为年,月) 的相关文章

随机推荐

  • 机械臂 手眼标定 手眼矩阵 eye-in-hand 原理、实践及代码

    1 手眼标定 所谓手眼系统 就是人眼睛看到一个东西的时候要让手去抓取 就需要大脑知道眼睛和手的坐标关系 而相机知道的是像素坐标 机械手是空间坐标系 所以手眼标定就是得到像素坐标系和空间机械手坐标系的坐标转化关系 目前工业上通常使用两种方法进
  • IDEA下导入maven项目时Maven Project处未能显示jar包正常解决办法

    IDEA下导入多级maven项目时未能显示正常解决办法 1 Ctrl Alt Shift S 打开Project Structrue 2 左边点击 Modules 切换到Modules选项卡 3 此时你如果发现现在已经加载所有工程中并没有你
  • IPSEC流程例子及两个阶段的协商过程详细介绍

    IPSEC VPN两个阶段的协商过程详细介绍 IPSec体系结构模型图 我们来看一个完整的IPSec体系结构模型图 以便更好地理解IPSec体系结构 IPSec流程图 SAKMP IKE第一阶段称为ISAKMP IKE的管理连接阶段 使用双
  • docker中镜像和容器的批量操作

    1 批量删除镜像 docker rmi docker images grep 条件 awk print 3 docker images 所展示的列表 第三列为镜像id 根据镜像id做删除操作 2 批量删除容器 docker rm f doc
  • 华为OD机试 - 最长广播响应(Java)

    题目描述 某通信网络中有N个网络结点 用1到N进行标识 网络中的结点互联互通 且结点之间的消息传递有时延 相连结点的时延均为一个时间单位 现给定网络结点的连接关系link i u v 其中u和v表示网络结点 当指定一个结点向其他结点进行广播
  • 因果推断(四)——后门调整、前门调整、逆概率加权

    在因果推断 三 中 我们介绍了干预的相关概念 在本文中 我们对一些方法进行介绍 这些方法可用于利用干预分析变量之间的因果关系 在因果推断 三 中 我们得出了调整公式 如上式 假设PA为A节点的所有父节点的集合 则上 式可以修改为 其中b为P
  • 架构与思维:系统容量设计

    背景 单位每年都会举行运动会 有一个2000m长跑的项目 大约每年报名人员为男选手40人 女选手20人 只有一条橡胶跑道 一次比赛10人齐跑 所以至少需要6场比赛 2000米的完成时间要求是20分钟 超过20分钟不计数 所以比赛耗时我们计算
  • Multi-Scale Convolutional Neural Networks for Time Series Classification

    keywords 时间序列处理 深度学习 keras 针对现有时间序列分类方法的特征提取与分类过程分离 且无法提取存在于不同时间尺度序列的不同特征的问题 作者提出MCNN模型 对于单一时间序列输入 进行降采样和滑动平均等变化 产生多组长度不
  • 双向dc-dc变换器原理

    buck电路原理 电容用于平滑电压 由于电容电压不能突变 所以再接一个电感 二极管的作用是给电感提供续流作用 boost电路原理 由于直接升压难以实现 理想情况下输入输出功率相同 可以通过减小输出电流来实现提高输出电压 双向dc dc变换器
  • Open3D 格网法计算点云的占地面积

    目录 一 算法原理 二 代码实现 三 结果展示 四 测试数据 一 算法原理 该方法主要用于粗略统计机载点云的占地面积 方法原理是将点云沿 X O Y XOY XOY面划分成格网 统计有点的格网面积来近似表示点云占地面积 二 代码实现
  • Android 加载高清巨图,无需剪裁压缩

    LargeImage Android 加载大图 可以高清显示10000 10000像素的图片 可以滑动 放大缩小具有PhotoView的效果 普通图片也可以用它展示 Gradle compile com shizhefei LargeIma
  • ospf协议域内SPF算法计算生成树的理解

    在阅读华为IERS文档后的有关SPF的理解 有些详细原理细节省略 图片来自华为文档 计算域内生成树使用Dijkstra算法计算最短路径 使用如下的拓扑图 OSPF的LSA有七种类型 SPF算法计算最小生成树使用一类Router LSA和二类
  • Spark编程基础-RDD

    目录 1 何为RDD 2 RDD的五大特性 3 RDD常用算子 3 1 Transformation算子 1 map 2 flatMap 3 reduceByKey 4 mapValues 5 groupBy 6 filter 7 dist
  • CentOS7 上安装 Postgresql

    1 选择安装包 在postgresql的官方即可找到源码文件目录 地址如下 postgresql的官网地址 根据项目需求选择对应的版本进行安装 具体如下图所示 2 安装 解压安装包 首先进入源码包所在的目录进行解压 root admin n
  • 【http】get/post 获取请求参数

    1 只对 get 请求获取 Url 后面的参数 使用 HttpServletRequest的 getQueryString 方法 String getQueryString 2 无论是 get 还是 post 请求 获取参数 使用 Serv
  • Java使用Selenium实现自动化测试以及全功能爬虫

    1 你听没听说过Selenium 1 1 自动化测试 提到Selenium 便离不开自动化测试 自动化测试 就是把手工进行的测试过程 转变成机器自动执行的测试过程 自动化测试有如下优点 对程序的回归测试更方便 这可能是自动化测试最主要的任务
  • 安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南

    摘要 随着科学技术的发展 我国的物联网技术有了很大进展 为了提升电力抄表服务的稳定性 保障电力抄表数据的可靠性 本文提出并实现了基于物联网的智能电力抄表服务平台 结合云计算 大数据等技术 提供电力集抄 能耗管理 电气安全 预付费 智能运维等
  • 【IDEA】启动项目错误:Error:java: System Java Compiler was not found in classpath

    1 概述 今天 IDEA启动项目错误 Error java System Java Compiler was not found in classpath 找了如下方案 Settings gt java compiler gt 将javac
  • 【安装教程】Anaconda软件安装教程

    安装Anaconda 下载64位的版本 下载地址 Free Download Anaconda 点击Windows徽标后 页面会往下滚动 选择64位的安装包 安装步骤截图 第一步 点击 Next 点击 I Agree 选择 All User
  • 时间的计算方法 (根据两个时间段判断是否为年,月)

    1 根据两个时间段判断是否为一年 格式 20230206 20240205 校验年 格式 20230206 20240205 public Boolean checkYear Date date1 Date date2 SimpleDate