我有一個使用MySQL的Ruby on Rails應用程序,我需要計算一個有開始和結束日期行的表的空閒(可用)時間塊。這需要在一個日期範圍內完成,因此,例如,我需要查看5月1日到5月7日之間的哪些時間是空閒的。我可以查詢具有不可用時間的表並使用它來刪除句點時間爲5月1日至5月7日。數據庫中的時間在一刻鐘內保存爲15分鐘,這意味着所有時間都在00,15,30或45分鐘結束。從來沒有像11:16或10:01那樣的時間,所以不需要四捨五入。如何使用開始和結束時間計算空閒時間塊?
我想過創建一個散列,其時間以15分鐘爲增量進行表示,並將所有值默認爲「可用」(1),然後遍歷行的有序結果集並將散列中的值翻到0表示從數據庫返回的時間。我不確定這是否是這樣做的最有效的方式,我對該方法的內存利用率和計算強度有點擔心。這種計算不會一直髮生,但它需要擴展至一天至少幾百次。看起來我還需要重新處理整個散列,以查找在這之後空閒的時間塊,這看起來效率很低。
有更好的方法來做到這一點的任何想法?
謝謝。
另外,值得注意的是,我不一定需要Ruby或RoR的特定解決方案 - 對於這個問題的任何語言或通用算法方法將不勝感激。 – 2011-03-25 13:28:55
你的問題太含糊。如果您有11:01-11:16的起始端不可用時間,您是否想將其舍入到最接近的15分鐘點,如11:00-11:15,或者您認爲每15分鐘的時間段包括不可用時間不可用,因此整個11:00-11:30變得不可用? – sawa 2011-03-25 16:30:23