java計算兩個時間段的重合天數
由於我要計算一個合同在當月的分攤的金額,所以就要知道這個合同的有效期在本月有多少天,這就要進行兩個時間段重合天數的計算。
兩個時間段四個時間點,相當於時間軸上的兩條線段(b代表起點,e代表端點,b<=e)和4個端點。
可分3種情況:
1.不相交。(b1-----e1)【b2-----e2】(b1-----e1)。if(e1<b2||b1>e2)此時,重合天數為零。
2.相交。
情況一:(b1---【b2---e1)----e2】 if(b1<b2&&e1<e2&&e1>b2)
情況二:【b2---(b1---e2】----e1) if(b1>b2&&b1<e2&&e2<e1)
3.包含
(b1---【b2-----e2】--e1) if(b1<b2&&e1>e2)
【b2---(b1-----e1)--e2】 if(b1>b2&&e1<e2)
import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * @author skysnow * */ public class myDateUtil { /** *這裡共有2個時間段(b1-----e1)【b2-----e2】,4個時間點; *相當於兩條線段(b代表起點,e代表端點,b<=e),4個端點。 *可分3種情況: *1.不相交。(b1-----e1)【b2-----e2】(b1-----e1)。if(e1<b2||b1>e2)此時,重合天數為零。 *2.相交。 *情況一:(b1---【b2---e1)----e2】 if(b1<b2&&e1<e2&&e1>b2) *情況二:【b2---(b1---e2】----e1) if(b1>b2&&b1<e2&&e2<e1) *3.包含:計算較短的時間段日期長度。 *(b1---【b2-----e2】--e1) if(b1<b2&&e1>e2) *【b2---(b1-----e1)--e2】 if(b1>b2&&e1<e2) * @param begindate1 開始日期 * @param enddate1 結束日期 * @param begindate2開始日期 * @param enddate2 結束日期 * @return */ public static String getDayCoincidence(Date begindate1,Date enddate1,Date begindate2,Date enddate2){ long b1=begindate1.getTime(); long e1=enddate1.getTime(); long b2=begindate2.getTime(); long e2=enddate2.getTime(); assert(b1<e1&&b2<e2); String coincidenceday; if(b1<=b2&&e1>=e2){//(b1---【b2-----e2】--e1) System.out.println("1包含2"); coincidenceday=getDayDifference(enddate2,begindate2); }else if(b1>=b2&&e1<=e2){//【b2---(b1-----e1)--e2】 System.out.println("2包含1"); coincidenceday=getDayDifference(enddate1,begindate1); }else if(b1>=b2&&b1<=e2&&e2<=e1){//【b2---(b1---e2】----e1) System.out.println("相交"); coincidenceday=getDayDifference(enddate2,begindate1); }else if(b1<=b2&&e1<=e2&&e1>=b2){//(b1---【b2---e1)----e2】 System.out.println("相交"); coincidenceday=getDayDifference(enddate1,begindate2); }else if(e1<=b2||b1>=e2){ coincidenceday="0"; }else{ coincidenceday=""; System.out.println("意料外的日期組合,無法計算重合天數!"); } System.out.println("重合天數為["+coincidenceday+"]天。"); return coincidenceday; } /** * 計算兩個日期的相差天數(d1-d2) * @param d1 * @param d2 * @return */ public static String getDayDifference(Date d1,Date d2){ StringBuffer ds = new StringBuffer(); try{ long num = (d1.getTime()-d2.getTime())/1000; long days = num/(3600*24); if(days>=0)ds.append(days); }catch(Exception e){ ds=new StringBuffer(""); e.printStackTrace(); } return ds.toString(); } public static Date stringToDate(String strDate) { if (strDate==null){return null;} SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } public static String getThisMonth() { // 本月的第一天 Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.DATE, 1); SimpleDateFormat simpleFormate = new SimpleDateFormat("yyyy-MM-dd"); String fd = simpleFormate.format(calendar.getTime()); // 本月的最後一天 calendar.set( Calendar.DATE, 1 ); calendar.roll(Calendar.DATE, - 1 ); String ld = simpleFormate.format(calendar.getTime()); return fd+","+ld; } public static void main(String[] args) { String[] thisMonth=getThisMonth().split(","); Date begindate1 = stringToDate(thisMonth[0]+" 00:05:00"); Date enddate1 = stringToDate(thisMonth[0]+" 24:05:00");; Date begindate2 = stringToDate(thisMonth[0]+" 00:05:00"); Date enddate2 = stringToDate(thisMonth[1]+" 00:00:00"); System.out.println(getDayCoincidence(begindate1, enddate1, begindate2, enddate2)); } }
相關推薦
java計算兩個時間段的重合天數
由於我要計算一個合同在當月的分攤的金額,所以就要知道這個合同的有效期在本月有多少天,這就要進行兩個時間段重合天數的計算。 兩個時間段四個時間點,相當於時間軸上的兩條線段(b代表起點,e代表端點,b<=e)和4個端點。 可分3種情況:1.不相交。(b1-----e1)【
java計算兩個時間段的精確天數
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1=sdf.parse
java 計算兩個日期之間天數
import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author JavaAlpha * @
Java 計算兩個日期相差年數字、月數、天數及時分秒
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.log4j.Logger;
Java 計算兩個日期相差的天數
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test16 { /**
JAVA-計算兩個日期之間相差的天數
/** * 計算兩個日期之間相差的天數 * @param date1 * @param date2 * @return */ public static int daysBetween(Date date1,Date
java實現計算兩個日期相差天數
要求:計算1999年1月1日和2018年11月3日相差多少天 思路: 1、每年的天數累加,需判斷閏年、平年 2、每月的天數累加,不同月份天數不同,平年和閏年,2月份的天數也不同 3、將日期天數累加 (因為計算的是相差的天數,所以這個天數需要減1天,所以這裡加2就可以了) packag
Java 計算兩個日期相差月數、天數
public static final int daysBetween(Date early, Date late) { java.util.Calendar calst = java.util.Calendar.getInstance(); jav
java計算兩個日期相差的天數
/** * 計算兩個日期相差的天數 * @param oldDate * @param newDate * @return * @author
java計算兩個日期之前的天數(工作日),排除節假日和週末
如題所說,計算兩個日期之前的天數,排除節假日和週末。這裡天數的型別為double,因為該功能實現的是請假天數的計算,有請一上午假的為0.5天。 不夠很坑的是每個日期都要查詢資料庫,感覺很浪費時間。
Java計算兩個日期之間的天數
package exercise; import java.util.Scanner; public class PerCalender { public static void main(String[] args) { //輸入初始日期 Scanner s
Java計算兩個日期時間之間的天數-省事高階
有一種low的方式,就是你把兩個時間都換成秒,然後除以一天的秒數,然後向上取整,就是算的天數。但是這麼實現太low啦。jdk有高階的API,我們為啥還要自己去實現呢,問題就是我們不知道。所以,我在這寫個筆記,記錄下,jdk 1.8 是怎麼做的。 /** * 計
php 計算兩個日期相差天數
class end rto date 日期相差 天數 day sharp echo php 計算兩個日期相差天數 <?php $startdate=strtotime("2013-3-09"); $enddate=strtotime("2013-
MYSQL如何計算兩個日期間隔天數
如何透過MYSQL自帶函式計算給定的兩個日期的間隔天數 有兩個途徑可獲得 1、利用TO_DAYS函式 select to_days(now()) - to_days('20120512') 2、利用DATEDIFF函式 select datediff(now(),'201205
Java計算兩日期之間的天數
public static int daysBetween(String early, String late){ Date earlydate = new Date(); Date latedate = n
js計算兩個日期的天數差值
函數 ber parseint pre days var 毫秒 cti param js計算兩個日期的天數差值 通過兩個日期計算這兩個日期之間的天數差值 /** * 計算天數差的函數,通用 * @param sDate1 * @param sDate2 * @ret
Java計算兩個日期時間相差幾天,幾小時,幾分鐘等
目錄 方法一: 方法二: 方法三: java 比較時間大小 現在是2004-03-26 13:31:40 過去是:2004-01-02 11:30:24 要獲得兩個日期差,差的形式為:XX天XX小時XX分XX秒 方法一: DateFormat df = new Si
java計算兩個日期相差多少天
在控制檯上輸入兩個精確到年,月,日的時間。 計算兩個日期之間相差了多少天,並顯示在控制檯上 package com.neuedu.homework; import java.util.Calendar; import java.util.Scanner; import sun.uti
Java 計算兩個Data物件的時間差
需求原因: 有時候需要計算兩個Date物件的時間差來定時處理某種事務,獲取到的時間差可以是分鐘差,秒差,毫秒等等,相互轉化即可 package io.bbc13.util; impo
面試:解決重點問題,計算兩個時間段是否有交集的演算法及其應用例項
1、通過 if 判斷語句進行判斷,if(endTime1 > startTime2 && endTime2 > startTime1) 那麼這兩個時間段有交集,一個時間段的結束時間大於另一個時間段的開始時間,如果成立那麼兩個時間段有交集。