java 判断两个时间段是不是有交集
3个回答
展开全部
public class DateKit{
/**
时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了
* @return
*/
public static boolean isContain(Date[] a, Date[] b) {
long astatr = a[0].getTime();
long aend = a[1].getTime();
long bstatr = b[0].getTime();
long bend = b[1].getTime();
// a0 包在了 b0 ~ b1 之间
if( astatr>=bstatr && astatr<=bend ) return true;
// b0 包在了 a0 ~ a1 之间
if( astatr<=bstatr && aend>=bstatr ) return true;
return false;
}
/**
时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 , (允许首尾相等而不包含的情况)
* @return
*/
public static boolean isContainEnd(Date[] a, Date[] b) {
long astatr = a[0].getTime();
long aend = a[1].getTime();
long bstatr = b[0].getTime();
long bend = b[1].getTime();
// a0 包在了 b0 ~ b1 之间
if( astatr>=bstatr && astatr<bend ) return true;
// b0 包在了 a0 ~ a1 之间
if( astatr<=bstatr && aend>bstatr ) return true;
// 相等
if( astatr==bstatr && aend==bend ) return true;
return false;
}
// 功能 工具 扩展
public static boolean isContain(String astatr,String aend, String bstatr,String bend) {
return isContain(new String[]{astatr , aend}, new String[]{bstatr , bend});
}
public static boolean isContain(String[] aStr, String[] bStr) {
return isContain(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
}
public static boolean isContain(String[] aStr, String[] bStr, String pattern) {
final SimpleDateFormat SF = new SimpleDateFormat(pattern);
try {
return isContain(new Date[]{SF.parse(aStr[0]), SF.parse(aStr[1])} , new Date[]{SF.parse(bStr[0]), SF.parse(bStr[1])});
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean isContainEnd(String astatr,String aend, String bstatr,String bend) {
return isContainEnd(new String[]{astatr , aend}, new String[]{bstatr , bend});
}
public static boolean isContainEnd(String[] aStr, String[] bStr) {
return isContainEnd(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
}
public static boolean isContainEnd(String[] aStr, String[] bStr, String pattern) {
final SimpleDateFormat SF = new SimpleDateFormat(pattern);
try {
return isContainEnd(new Date[]{SF.parse(aStr[0]), SF.parse(aStr[1])} , new Date[]{SF.parse(bStr[0]), SF.parse(bStr[1])});
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
测试:
public static void main(String[] args) throws ParseException {
final SimpleDateFormat SF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date[] a = {SF.parse("2017-07-06 11:53:00"), SF.parse("2017-07-06 14:52:00")};
Date[] b = {SF.parse("2017-07-06 14:52:00"), SF.parse("2017-07-06 16:52:00")};
System.out.println("您好, 智能的电脑! 请问:");
for (Date date : a) {
System.out.print(date.toString() + " ~ ");
}
System.out.println("包含:");
for (Date date : b) {
System.out.print(date.toString() + " ~ ");
}
System.out.println("吗?");
boolean ret = DateKit.isContain(a, b);
System.out.println("o(∩_∩)o 哈哈 ~ 我猜是: " + ret);
ret = DateKit.isContainEnd(a, b);
System.out.println("o(∩_∩)o 哈哈 ~ 允许首尾相等 我猜是: " + ret);
}
找了半天, 没见写的好的. 自己动手写个, 问题是 两个时段,, 大部分人给的是 两个时间点..
2016-05-21
展开全部
f((startTime.getTime()<=start.getTime()) &&
endTime.getTime()>=start.getTime())){
return true;
}else if((startTime.getTime()>=start.getTime())&&
startTime.getTime()<=endTime.getTime()){
return true;
}else{
return false;
}
endTime.getTime()>=start.getTime())){
return true;
}else if((startTime.getTime()>=start.getTime())&&
startTime.getTime()<=endTime.getTime()){
return true;
}else{
return false;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package com.test;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* ClassName:TestNetwork Function: TODO ADD FUNCTION Reason: TODO ADD REASON
*
* @author 田志超
* @version
* @since Ver 1.1
* @Date 2010-4-6 下午01:15:41
*/
public class TestNetwork {
public static void main(String[] args) {
try{
isOverlap("1999/01/01","2999/01/01","3456/01/01","4423/1/24");
}catch (Exception e) {
// TODO: handle exception\
e.printStackTrace();
}
}
public static boolean isOverlap(String date1Begin, String date1End, String date2Begin, String date2End)throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date d1b = sdf.parse(date1Begin);
Date d1e = sdf.parse(date1End);
Date d2b = sdf.parse(date2Begin);
Date d2e = sdf.parse(date2End);
if (d1e.compareTo(d2b)>=0) return true;
else return false;
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* ClassName:TestNetwork Function: TODO ADD FUNCTION Reason: TODO ADD REASON
*
* @author 田志超
* @version
* @since Ver 1.1
* @Date 2010-4-6 下午01:15:41
*/
public class TestNetwork {
public static void main(String[] args) {
try{
isOverlap("1999/01/01","2999/01/01","3456/01/01","4423/1/24");
}catch (Exception e) {
// TODO: handle exception\
e.printStackTrace();
}
}
public static boolean isOverlap(String date1Begin, String date1End, String date2Begin, String date2End)throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date d1b = sdf.parse(date1Begin);
Date d1e = sdf.parse(date1End);
Date d2b = sdf.parse(date2Begin);
Date d2e = sdf.parse(date2End);
if (d1e.compareTo(d2b)>=0) return true;
else return false;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询