zoukankan      html  css  js  c++  java
  • 关于时间比较的一个算法

        前些时间在做老师布置的一个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种设计模式
    微信小程序页面跳转
    【论文阅读】OrigamiNet:Weakly-Supervised, Segmentation-Free, One-Step, Full Page Text Recognition by learning to unfold
    【华为昇腾】DB_ResNet精度调优 Siammask性能调优 模型众筹项目复盘
    Ueditor 防止html过滤标签的操作
    海康摄像机rtsp地址格式官方最新版(2020)
    HLS协议解析
    解决帝国标题颜色颜色单引号问题
    帝国CMS动态页支持栏目导航标签,万能标签,循环子栏目标签
  • 原文地址:https://www.cnblogs.com/yja9010/p/3178794.html
Copyright © 2011-2022 走看看