GVKun编程网logo

实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数

10

在本文中,我们将为您详细介绍实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数的相关知识,此外,我们还会提供一些关于Android计算两个日期之间的天数、elem

在本文中,我们将为您详细介绍实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数的相关知识,此外,我们还会提供一些关于Android计算两个日期之间的天数、element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数、flex计算两个日期之间相差的天数、Go语言:求两个日期相差的天数的有用信息。

本文目录一览:

实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数

实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数

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;

}


}

Android计算两个日期之间的天数

Android计算两个日期之间的天数

我编写了以下代码来查找两个日期之间的日期

    startDateValue = new Date(startDate);    endDateValue = new Date(endDate);    long diff = endDateValue.getTime() - startDateValue.getTime();    long seconds = diff / 1000;    long minutes = seconds / 60;    long hours = minutes / 60;    long days = (hours / 24) + 1;    Log.d("days", "" + days);

当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。

我究竟做错了什么?感谢您的时间。

注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时间。不推荐使用日期构造函数。

答案1

小编典典

您用于生成日期对象的代码:

Date date = new Date("2/3/2017"); //deprecated

您得到28天作为答案,因为根据Date(String)构造函数,它认为天= 3,月= 2和年= 2017

您可以将String转换为Date,如下所示:

String dateStr = "2/3/2017";SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");Date date = sdf.parse(dateStr);

使用上面的模板制作Date对象。然后使用下面的代码计算两个日期之间的天数。希望这件事能解决。

它可以按如下方式完成:

long diff = endDateValue.getTime() - startDateValue.getTime();System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

请检查链接

如果您使用Joda Time,它将更加简单:

int days = Days.daysBetween(date1, date2).getDays();

element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数

element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数

日期的筛选经常会有最小的日期选择,例如:当前日期

:clearable="false"
  :picker-options="pickerOptions0"
  value-format="yyyy-MM-dd"
  v-model="startTime"
  type="date"
  placeholder="选择日期">
  </el-date-picker>

  <el-date-picker
  :clearable="false"
  :picker-options="pickerOptions1"
  value-format="yyyy-MM-dd"
  v-model="endTime"
  type="date"
  placeholder="选择日期">
  </el-date-picker>
//开始时间小于等于今天可选
  pickerOptions0: {
    disabledDate(time) {
      return time.getTime() < Date.now() - 8.64e7;
    }
  },
//结束时间小于等于开始时间可选  - 8.64e7
  pickerOptions1: {
    disabledDate: (time) => {
      return time.getTime() < Date.now() - 8.64e7 ||
        time.getTime() < new Date(that.value1).getTime()- 8.64e7;
    }
  },

 设置选择的日期格式

<el-date-picker type="date" placeholder="出发日期" v-model="userDate.date1" :picker-options="pickerOptions0" style="width: 100%;" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd"></el-date-picker>

计算两个日期相差多少天

 

/**
            * 计算两个日期相差的天数
            * sDate1和sDate2是2006-12-18格式 
            */
            DateDiff(sDate1, sDate2){    
                 var  aDate,  oDate1,  oDate2,  iDays  
                 aDate   =  sDate1.split("-")  
                 oDate1 = new Date(aDate[0] , aDate[1] ,aDate[2])    //转换为12-18-2006格式  
                 aDate   =  sDate2.split("-")  
                 oDate2 = new Date(aDate[0] , aDate[1] , aDate[2])  
                 iDays   =  parseInt(Math.abs(oDate1  -  oDate2)  /  1000  /  60  /  60  /24)    //把相差的毫秒数转换为天数  
                return  iDays
            },

 

flex计算两个日期之间相差的天数

flex计算两个日期之间相差的天数

 

package common
{

 /**
  *@title as3指定的两个公历日期相差天数类库
  *@author
  *@version 0.1
  *@date 2010.08.17
  *@environment as3.0 FlashPlayer9
  *@调用方式 trace(SelfDateUtil.manyDayNum("20081230","20110317"));
  * */


 public class SelfDateUtil
 {
  public function SelfDateUtil()
  {
  }

  /**
   * 虽然名字为fromFormatDayStr和toFormatDayStr, 单两个参数所代表的开始和结束年份没有先后顺序;如:
   * SelfDateUtil.manyDayNum("20081230","20110317")与SelfDateUtil.manyDayNum("20110317","20081230")等效。
   * */
  public static function manyDayNum(fromFormatDayStr:String,toFormatDayStr:String):Number
  {
   var manyAllDayNum:Number=0; //间隔的天数
   var _fromYear:int=int(fromFormatDayStr.substr(0,4));
   var _toYear:int=int(toFormatDayStr.substr(0,4));
   if (_toYear == _fromYear)
   { //同一年
    manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[0]) - Number(alreadyOverDay(fromFormatDayStr)[0]);
   }
   else if (Math.abs(_toYear - _fromYear) == 1)
   { //相差一年
    if (_toYear > _fromYear)
    {
     manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
    }
    else
    {
     manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
    }
   }
   else
   { //相差两年或者两年以上
    var mangYearNum:Number=Math.abs(Number(_toYear - _fromYear)); //中间间隔的年份
    if (_toYear > _fromYear)
    {
     manyAllDayNum=Number(alreadyOverDay(fromFormatDayStr)[1]) + Number(alreadyOverDay(toFormatDayStr)[0]);
     for (var i:int=1; i < mangYearNum; i++)
     {
      if (isRunYear(String(_fromYear + i)))
      { //是闰年
       manyAllDayNum+=366;
      }
      else
      { //不是闰年
       manyAllDayNum+=365;
      }
     }
    }
    else
    {
     manyAllDayNum=Number(alreadyOverDay(toFormatDayStr)[1]) + Number(alreadyOverDay(fromFormatDayStr)[0]);
     for (var j:int=1; j < mangYearNum; j++)
     {
      if (isRunYear(String(_toYear + j)))
      { //是闰年
       manyAllDayNum+=366;
      }
      else
      { //不是闰年
       manyAllDayNum+=365;
      }
     }
    }
   }
   return manyAllDayNum;
  }

 

 

  /**指定的一年之内已经过了多少天了(算上当天),
   *dayStr标准格式为YYYYMMDD,例如:20100816
   *要保证dayStr参数的格式和实际含义正确,如不能出现20100229
   *[0]表示已经过了多少天,[1]表示还剩下多少天 */
  public static function alreadyOverDay(dayFormatStr:String):Array
  {
   var _tempArr:Array=new Array();
   var alreadyDayNum:int=0;
   var _year:int=int(dayFormatStr.substr(0,4));
   var _month:int=int(dayFormatStr.substr(4,2));
   var _day:int=int(dayFormatStr.substr(6,2));
   if (_month == 1)
   {
    alreadyDayNum=_day;
   }
   else if (_month == 3)
   {
    alreadyDayNum=31 + _day;
   }
   else if (_month == 4)
   {
    alreadyDayNum=62 + _day;
   }
   else if (_month == 5)
   {
    alreadyDayNum=92 + _day;
   }
   else if (_month == 6)
   {
    alreadyDayNum=123 + _day;
   }
   else if (_month == 7)
   {
    alreadyDayNum=153 + _day;
   }
   else if (_month == 8)
   {
    alreadyDayNum=184 + _day;
   }
   else if (_month == 9)
   {
    alreadyDayNum=215 + _day;
   }
   else if (_month == 10)
   {
    alreadyDayNum=245 + _day;
   }
   else if (_month == 11)
   {
    alreadyDayNum=276 + _day;
   }
   else if (_month == 12)
   {
    alreadyDayNum=306 + _day;
   }
   if (isRunYear(dayFormatStr))
   { //是闰年
    if (_month == 2)
    {
     alreadyDayNum=31 + _day;
    }
    else if (_month == 1)
    {

    }
    else
    {
     alreadyDayNum+=29;
    }
    _tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
    _tempArr[1]=366 - alreadyDayNum; //还剩多少天没有过
   }
   else
   { //不是闰年
    if (_month == 2)
    {
     alreadyDayNum=31 + _day;
    }
    else if (_month == 1)
    {

    }
    else
    {
     alreadyDayNum+=28;
    }
    _tempArr[0]=alreadyDayNum; //已经过的天数(算上今天)
    _tempArr[1]=365 - alreadyDayNum; //还剩多少天没有过
   }
   return _tempArr;
  }

 

  /*指定的一年中过了多少天了,dayStr标准格式为YYYYMMDD,例如:20100816*/
  public static function isRunYear(dayStr:String):Boolean
  {
   var _year:Number=Number(dayStr.substr(0,4));
   if ((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)
   {
    return true;
   }
   else
   {
    return false;
   }
  }
 }

}

Go语言:求两个日期相差的天数

Go语言:求两个日期相差的天数

package main

import (
	"fmt"
	"time"
)

func main(){
	current:=time.Now().Unix()  

	fmt.Println(current)

	BeforeDate:="2019-09-01 15:48:00"
	loc, _ := time.LoadLocation("Local")    //获取时区  
	tmp, _ := time.ParseInLocation("2006-01-02 15:04:05", BeforeMoth, loc) 
	timestamp := tmp.Unix()    //转化为时间戳 类型是int64
	
	fmt.Println(timestamp)

	res:=(current-timestamp)/86400 //相差值

    fmt.Println(res) 
}

关于实现:判断日期之间关系(相交,相离,重合),得到相交重合的天数以及计算两个日期相差的天数的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android计算两个日期之间的天数、element ui 日期控件范围时间限制记录、以及计算两个日期之间的天数、flex计算两个日期之间相差的天数、Go语言:求两个日期相差的天数等相关内容,可以在本站寻找。

本文标签: