关于时间比较的一个算法

    前些时间在做老师布置的一个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内会出现多次提醒的现象,具体情况可根据上一个例子来分析一下!

原文地址:https://www.cnblogs.com/yja9010/p/3178794.html