• 关于时间比较的一个算法


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

  • 相关阅读:
    Leetcode#104 Maximum Depth of Binary Tree
    Leetcode#102 Binary Tree Level Order Traversal
    js 实时显示字数
    js获取链接参数
    DIV+CSS左右列高度自适应问题
    css 背景透明,文字不透明
    css position的值
    从头搭建vue项目
    vuejs怎么在服务器部署?
    windows下nginx安装、配置与使用
  • 原文地址:https://www.cnblogs.com/yja9010/p/3178794.html
Copyright © 2020-2023  润新知