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;

    }


    }

  • 相关阅读:
    A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list.
    leetcode算法
    leetcode
    UVA 11076 Add Again
    UVA 10892 LCM Cardinality
    HDU 5961 传递
    UVALive 7040 Color
    2014ACM/ICPC亚洲区广州站题解
    HDU 5136 Yue Fei's Battle
    HDU 5129 Yong Zheng's Death
  • 原文地址:https://www.cnblogs.com/xiaweicn/p/8684428.html
Copyright © 2011-2022 走看看