zoukankan      html  css  js  c++  java
  • 实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数

    package com.xiawei.repeatdays;

    import java.util.Date;

    /**
    * 判断日期之间关系(相交,相离,重合),得到相交重合的天数
    *
    */
    public class RepeatDays {

    /**
    * 将两个日期相减的结果以字符串秒的格式返回
    */
    public static String getDayDifference(Date d1 , Date d2){
    StringBuffer ds = new StringBuffer();
    long days = ((d1.getTime() - d2.getTime())/1000)/(3600*24);
    if(days >= 0){
    ds.append(days);
    }
    return ds.toString();

    }

    /**
    * 计算两个日期区间重合的天数
    * @param startDate1 第一个开始日期
    * @param endDate1 第一个结束日期
    * @param startDate2 第二个开始日期
    * @param endDate2 第二个结束日期
    * @return 日期区间重合的天数
    */
    public static int getRepeatDays(Date startDate1,Date endDate1,Date startDate2,Date endDate2){
    //将日期类型转换为数值以秒为单位
    long star1 = startDate1.getTime();
    long end1 = endDate1.getTime();
    long star2 = startDate2.getTime();
    long end2 = endDate2.getTime();
    String coincidenceday;
    //这里有一个小知识点,就是assert关键字.他在C++也有,表示断言.java在执行的时候是不开启断言检查的
    //它有两种用法:
    //1.assert<bollean表达式>;
    // --如果为true程序继续执行,false则抛出AssertionError,并终止执行
    //2.assert<bollean表达式>:<错误信息表达式>.
    // --如果为true程序继续执行,false则抛出java.lang.AssertionError,并输入错误信息表达式
    assert(star1<end1 && star2<end2);

    if(star1<=star2 && end1 >= end2){

    coincidenceday = getDayDifference(endDate2,startDate2);
    }else if(star1>=star2 && end1 <= end2){

    coincidenceday = getDayDifference(endDate1,startDate1);
    }else if(star1>=star2 && star1<=end2 && end2 <= end1){

    coincidenceday = getDayDifference(endDate2,startDate1);
    }else if(star1 <= star2 && end1 <= end2 && end1 >= star2){

    coincidenceday = getDayDifference(endDate1,startDate2);
    }else if(end1 <= star2 && star1 >= end2){

    coincidenceday = "0";
    }else {

    coincidenceday = "0";
    }

    //
    int numberDays = Integer.parseInt(coincidenceday);

    return numberDays;

    }

    /**
    * 计算两个日期间相隔的天数
    * @param endDate 结束日期
    * @param startDate 开始日期
    * @return 两个日期间相隔的天数
    */
    public static int getRepeatDaysTwo(Date endDate,Date startDate){
    long star = startDate.getTime();
    long end = endDate.getTime();

    if(end < star){
    System.err.println("请用较晚的日期减去较早的日期!");
    }else{
    String coincidenceday = getDayDifference(endDate,startDate);
    int numberDays = Integer.parseInt(coincidenceday);
    //返回天数
    return numberDays;
    }
    return 0;

    }


    }

  • 相关阅读:
    终端等级UE Category—4G数据传输流程系列(五)
    4G数据传输流程系列(四)—物理层OFDM、MIMO实现
    4G数据传输流程系列(三)—物理层“从传输块到码字”
    4G网络数据传输流程与速率分析(二)--资源调度
    4G网络数据传输流程与速率分析系列(一)
    G.711 u律;A律 压缩算法
    VLAN IEEE802.1Q
    64B/66B编码
    Operator与优化
    对偶与Proximal
  • 原文地址:https://www.cnblogs.com/xiaweicn/p/8684428.html
Copyright © 2011-2022 走看看