關於時間比較的一個算法

    前些時間在做老師佈置的一個CRM項目,其中項目裏需要做一個日程相關提醒的功能,想一想如果是用Timer控件每隔一秒不停的執行輪詢定時 時間列表的話,也不是一個很好的設計思路,至少效率不是很好,最後老師給我們提了一個MSDN上的時間比較算法,讓我們自己研究,然後再運用到項目裏去,隨後就在MSDN上找到了具體這個算法實現,用起來還是比較的靈活,至少我認爲是這樣,下面是具體的實現:

 


  1.         /// <summary>
            /// 比較兩時間的在允許的範圍內是否相等
            /// </summary>
            /// <param name="time">第一個時間</param>
            /// <param name="setTime">設置的時間</param>
            /// <param name="allowRange">允許的範圍(s)</param>
            /// <param name="frequencyInSeconds">循環的時間週期(s)</param>
            /// <returns>True:相等 False:不相等</returns>
           public  static bool Compare(DateTime time, DateTime setTime, int allowRange, int frequencyInSeconds)
            {
  2.             long delta = (long)((TimeSpan)(setTime - time)).TotalSeconds % frequencyInSeconds;
  3.             delta = delta > allowRange ? frequencyInSeconds - delta : delta;
  4.             return Math.Abs(delta) < allowRange;
  5.         }

根據以上的方法參數的描述,不難發現如果用戶對時間的準確度要求不是特別精確的話,我們可以將所允許的時間範圍設置大一些,然後再將Timer控件的Interval屬性設置爲allowRange的兩倍,注意必須是allowRange兩倍的,否則會出現不提示,或者在allowRange範圍內提醒多次的情況,舉個例子:比如用戶設定時間是在當天的8:35:00 提醒,允許提醒在allowRange=5分鐘的範圍內。如果將Timer的Interval屬性設置爲20分鐘,有可能Timer是在8:25進入間隔時間段,也就是說Timer下次執行要在8:45發生,則就會錯過了用戶設定的提醒時間而導致沒有提醒的現象,設置的Timer間隔小於allowRange可能會出現一個allowRange內會出現多次提醒的現象,具體情況可根據上一個例子來分析一下!

發佈了23 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章