62,614
社区成员
发帖
与我相关
我的任务
分享
import java.util.Date;
import com.friendone.base.utils.date.DateHelper;
public class myDateUtil {
/**
* 计算两个日期的相差天数(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);
// long h = num/3600;
// if(h > 0){
// ds.append(h).append("小时");
// num = num%3600;
// }
// long m = num/60;
// if(m > 0){
// ds.append(m).append("分钟");
// num = num%60;
// }
// if(num > 0)
// ds.append(num).append("秒");
}catch(Exception e){
ds=new StringBuffer("");
e.printStackTrace();
}
return ds.toString();
}
/**
*这里共有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;
}
}
//String time1_star = "2011-01-01";
String time1_end = "2011-05-01";
String time2_star = "2011-04-01";
//String time2_end="2011-06-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date time1 =sdf.parse(time1_end);
Date time2 =sdf.parse(time2_star);
long diffDay= (time1.getTime()-time2.getTime())/(3600*1000*24);
if(diffDay > 0){
System.out.println("重合天数为:"+diffDay);
}else{
System.out.println("没有重合天数");
}
System.out.println(diffDay);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public class Test {
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d1Start = df.parse("2010-01-01");
Date d1End = df.parse("2011-01-01");
Date d2Start = df.parse("2010-06-01");
Date d2End = df.parse("2011-06-01");
System.out.println(calcOverlapDays(d1Start, d1End, d2Start, d2End));
}
public static int calcOverlapDays(Date range1Start, Date range1End,
Date range2Start, Date range2End) {
long range1StartTime = range1Start.getTime();
long range1EndTime = range1End.getTime();
long range2StartTime = range2Start.getTime();
long range2EndTime = range2End.getTime();
assert range1StartTime > range1EndTime;
assert range2StartTime > range2EndTime;
long overlapTime = Math.min(range1EndTime, range2EndTime)
- Math.max(range1StartTime, range2StartTime);
return (overlapTime < 0) ? 0
: (int) (overlapTime / 24 / 60 / 60 / 1000 + 1);
}
}