java計算兩個時間段的重合天數

來源:互聯網
上載者:User

由於我要計算一個合約在當月的分攤的金額,所以就要知道這個合約的有效期間在本月有多少天,這就要進行兩個時間段重合天數的計算。

兩個時間段四個時間點,相當於時間軸上的兩條線段(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));}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.