求一个方法.......java怎么判断日期有交集?

没事眯一会 2012-02-09 02:28:34
给定两个日期段如:2012-01-12 至 212-01-16 与 2012-01-14 至 2012-01-20
这两个日期由交集,怎么用java语言来判断呢,求思路、求方法~~!
...全文
475 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
luk5238110 2014-08-06
  • 打赏
  • 举报
回复
补充下有个小前提,时间段开始时间不能大于结束时间
luk5238110 2014-08-06
  • 打赏
  • 举报
回复
今天要找两个时间段之间的交集,懒得写就在网上找了好久,结果都写了N长的判断,想来想去觉得太麻烦,于是自己写了一个 总体思想就是,时间段肯定是四个时间点,那么我将四个时间点排序,那么判断时间段1的结束位置是否在第二位就可以了 于是就得出了一下代码,当然效率可能不高,毕竟list取出取入的效率不怎么好,排序效率也不高,主要是我不想写很多的判断

public static List<Date> dateSort(Date startTime,Date endTime,Date startTimeTwo,Date endTimeTwo){
		List<Date> datelist = new ArrayList<Date>();
		datelist.add(startTime);
		datelist.add(endTime);
		datelist.add(startTimeTwo);
		datelist.add(endTimeTwo);
		for (int j = 0; j < datelist.size(); j++) {
			for (int i = 1; i < datelist.size(); i++) {
				if(datelist.get(i-1).after(datelist.get(i))){
					Date temp = datelist.get(i-1);
					datelist.set(i-1, datelist.get(i));
					datelist.set(i, temp);
				}
			}
		}
		return datelist;
	}
	
	/**
	 * 获取两个时间的交集天数,为空报错,没有交集时返回0
	 * @param startTime
	 * @param endTime
	 * @param startTimeTwo
	 * @param endTimeTwo
	 */
	public static long getTimeIntersection(Date startTime,Date endTime,Date startTimeTwo,Date endTimeTwo){

		List<Date> listdate = dateSort(startTime, endTime, startTimeTwo, endTimeTwo);
		int i = listdate.indexOf(endTime);
		long subday = 0;//交集天数
//		i>1说明有交集
		if(i>1){
			//交集天数为索引为  1,2的差,这个是用来求两个时间的差的函数不在这个讨论范围就不粘贴出来了
			subday = getTimeSub(listdate.get(1), listdate.get(2), DateUtil.DAY);
		}
		return subday;
		
	}

  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sichongxing 的回复:]

有木有具体方法?
[/Quote]
上面这些挺具体的嘛
噜噜潘 2012-02-10
  • 打赏
  • 举报
回复
public static  boolean stringTdate(String[] arg1, String[] arg2) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d10 = sdf.parse(arg1[0]);
Date d11 = sdf.parse(arg1[1]);
Date d20 = sdf.parse(arg2[0]);
Date d21 = sdf.parse(arg2[1]);
if (d10.compareTo(d11)<0 & d20.compareTo(d21)<0) {
if (d11.compareTo(d20)>0) {
return true;
}
else return false;
}
if(d10.compareTo(d11)>0 & d20.compareTo(d21)<0) {
if (d10.compareTo(d20)>0) {
return true;
}
else return false;
}
if(d10.compareTo(d11)>0 & d20.compareTo(d21)>0) {
if (d10.compareTo(d21)>0) {
return true;
}
else return false;
}
else {
if (d11.compareTo(d21)>0) {
return true;
}
else return false;
}
}

写个最笨的办法
fengxue1101314a 2012-02-10
  • 打赏
  • 举报
回复
关键在 判断 是否 有 交集
这样就简单的多

时间段a
开始a1
结束a2

时间段b
开始b1
结束b2

时间段a与时间段b的交集出现在 a2>b1 && a1<b2 的时候

这个用户很懒 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soli11722984 的回复:]

if(第一组最后时间小于等于第二组最前时间 || 第一组最前时间大于等于第二组最后时间){
无交集
}
else{
有交集
}
[/Quote]

如2楼,用getTime方法判断
  • 打赏
  • 举报
回复
分别拿时间相减。看正负不就ok了。。
没事眯一会 2012-02-10
  • 打赏
  • 举报
回复
有木有具体方法?
没事眯一会 2012-02-10
  • 打赏
  • 举报
回复
	public static String comparisonRQ(String str1, String str2, String str3,
String str4) throws Exception {
String mesg = "";
// SimpleDateFormat rq = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dt1 = df.parse(str1);
Date dt2 = df.parse(str2);
Date dt3 = df.parse(str3);
Date dt4 = df.parse(str4);
if (dt1.getTime() < dt3.getTime() && dt3.getTime() < dt2.getTime()) {
mesg = "f";//重合
}
if (dt1.getTime() < dt4.getTime() && dt3.getTime() < dt2.getTime()) {
mesg = "f";//重合
}
}catch (ParseException e) {
e.printStackTrace();
throw new ParseException(e.getMessage(), 0);
}catch(Exception e){
e.printStackTrace();
throw new Exception(e);
}
return mesg;
}


虽然我写出来,但是还是谢谢你们!
BearKin 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 sichongxing 的回复:]
给定两个日期段如:2012-01-12 至 212-01-16 与 2012-01-14 至 2012-01-20
这两个日期由交集,怎么用java语言来判断呢,求思路、求方法~~!
[/Quote]

用getTime或者其他的方法将时间转换为整数型或者长整型(精度可以调整 比如秒 分 时等) 然后用比较整数的方法(>、<)来判定两个时间范围是否有交集

思路就是这些
soli11722984 2012-02-09
  • 打赏
  • 举报
回复
if(第一组最后时间小于等于第二组最前时间 || 第一组最前时间大于等于第二组最后时间){
无交集
}
else{
有交集
}
没事眯一会 2012-02-09
  • 打赏
  • 举报
回复
自己顶

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧