專案中經常會遇到判斷兩個時間段範圍是否有交集,所以本文就記錄下當時思考的過程和示例**。
本文提供兩種思路。
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直接判斷無交集的語句可能也有,但是目前沒...