判斷兩個時間段範圍是否有交集

2021-09-28 21:56:02 字數 2347 閱讀 6457

專案中經常會遇到判斷兩個時間段範圍是否有交集,所以本文就記錄下當時思考的過程和示例**。

本文提供兩種思路。

1)參考時間段 包含 比較時間段

2)參考時間段 只包含 比較時間段結束時間

3)參考時間段 只包含 比較時間段開始時間

4)比較時間段 包含 參考時間段

根據圖示編寫的**示例:

/**

* 判斷兩個時間範圍是否有交集

* * @param dynastarttime 比較時間段開始時間

* @param dynaendtime 比較時間段結束時間

* @param fixedstarttime 參考時間段開始時間

* @param fixedendtime 參考時間段結束時間

* @return

*/public static boolean checktimeshasoverlap(date dynastarttime, date dynaendtime, date fixedstarttime, date fixedendtime) else if (dynastarttime.gettime() <= fixedstarttime.gettime() && (dynaendtime.gettime() >= fixedstarttime.gettime() && dynaendtime.gettime() <= fixedendtime.gettime())) else if (dynastarttime.gettime() >= fixedstarttime.gettime() && dynastarttime.gettime() <= fixedendtime.gettime() && fixedendtime.gettime() >= fixedendtime.gettime()) else if (dynastarttime.gettime() <= fixedstarttime.gettime() && fixedendtime.gettime() >= fixedendtime.gettime()) else

}

這種方式是最直接、直觀的方式,如果需要求出交集時間段,也可使用這種方式。

如果只需要判斷是否有交集,其實**可以優化合併一下的,具體示例:

/**

* 判斷兩個時間範圍是否有交集

* * @param dynastarttime 比較時間段開始時間

* @param dynaendtime 比較時間段結束時間

* @param fixedstarttime 參考時間段開始時間

* @param fixedendtime 參考時間段結束時間

* @return

*/public static boolean checktimeshasoverlap(date dynastarttime, date dynaendtime, date fixedstarttime, date fixedendtime) else if (dynastarttime.gettime() >= fixedstarttime.gettime() && dynastarttime.gettime() < fixedendtime.gettime()) else

}

這樣**就比較簡單了,但是理解可能相對吃力。

首先求出兩時間段沒有交集的兩種情況和圖示對應,然後取反:

1) 比較時間段的結束時間在參考時間段的開始時間之前

2) 比較時間段的開始時間在參考時間段的結束時間之後

示例**:

/**

* 判斷兩個時間範圍是否有交集

* * @param dynastarttime 比較時間段開始時間

* @param dynaendtime 比較時間段結束時間

* @param fixedstarttime 參考時間段開始時間

* @param fixedendtime 參考時間段結束時間

* @return

*/public static boolean checktimeshasoverlap(date dynastarttime, date dynaendtime, date fixedstarttime, date fixedendtime)

這樣**即簡單又很好理解。

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...

sql語句判斷兩個時間段是否有交集

場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...