一个算法:关于如何判断两个时间是否在允许误差内相等

说明:以下文中本人使用的是C#语言,且时间精度为秒

有时候项目中会要求去判断两个时间是否是相等的,且是在误差范围内相等的,以下是本人项目中用到的算法,仅当做记事本而已,如有问题请指正,愿意相互学习。

相关类中自定义方法

// function: 判断两个时间是否在允许误差内相等
// params: 时间1、时间2、允许误差
public bool isTimeEqual(DateTime CurTime, DateTime RecTime, ushort errorValue)
{
    bool res = false;
    int P_CmpRes = 0;
    int P_dayTmp = 0;
    DateTime P_TimerHead, P_TimerLast;

    P_CmpRes = DateTime.Compare(CurTime, RecTime);
    if (errorValue > 60)
        return false;

    if (errorValue == 0)
    {
        if (P_CmpRes == 0)
        {
            res = true;
        }
        else
        {
            res = false;
        }
    }
    else
    {
        if (P_CmpRes == 0)                                            // 判断哪个时间在前
        {
            res = true;
        }
        else
        {
            if (P_CmpRes > 0)
            {
                P_TimerHead = CurTime;
                P_TimerLast = RecTime;
            }
            else
            {
                P_TimerHead = RecTime;
                P_TimerLast = CurTime;
            }

            // 时间不是严格相等但在误差范围内的一般情况
            if (P_TimerHead.Year == P_TimerLast.Year)                 // 同年 
            {
                if (P_TimerHead.Month == P_TimerLast.Month)                       // 同月
                {
                    if (P_TimerHead.Day == P_TimerLast.Day)                          // 同日
                    {
                        if (P_TimerHead.Hour == P_TimerLast.Hour)
                        {
                            if (P_TimerHead.Minute == P_TimerLast.Minute)                                       // 同分不同秒
                            {
                                if (P_TimerHead.Second - P_TimerLast.Second <= errorValue)
                                {
                                    res = true;
                                }
                                else
                                {
                                    res = false;
                                }
                            }
                            else                                                                                // 不同分不同秒
                            {
                                if (P_TimerHead.Minute - P_TimerLast.Minute == 1)
                                {
                                    if (P_TimerHead.Second + 60 - P_TimerLast.Second <= errorValue)
                                    {
                                        res = true;
                                    }
                                    else
                                    {
                                        res = false;
                                    }
                                }
                                else
                                {
                                    res = false;
                                }
                            }
                        }
                        else
                        {
                            if ((P_TimerHead.Hour - P_TimerLast.Hour == 1) && (P_TimerHead.Minute == 0) && (P_TimerLast.Minute == 59))
                            {
                                if (P_TimerHead.Second + 60 - P_TimerLast.Second <= errorValue)
                                {
                                    res = true;
                                }
                                else
                                {
                                    res = false;
                                }
                            }
                            else
                            {
                                res = false;
                            }
                        }
                    }
                    else                                                             // 不同日
                    {
                        if ((P_TimerHead.Day - P_TimerLast.Day == 1) && (P_TimerHead.Hour == 0) && (P_TimerHead.Minute == 0)
                        && (P_TimerLast.Hour == 23) && (P_TimerLast.Minute == 59))
                        {
                            if (P_TimerHead.Second + 60 - P_TimerLast.Second <= errorValue)
                            {
                                res = true;
                            }
                            else
                            {
                                res = false;
                            }
                        }
                        else
                        {
                            res = false;
                        }
                    }
                }
                else                                                             // 不同月 
                {
                    if ((P_TimerHead.Month == 4) && (P_TimerHead.Month == 6) && (P_TimerHead.Month == 8) && (P_TimerHead.Month == 9) && (P_TimerHead.Month == 11))
                    {
                        P_dayTmp = 31;
                    }
                    else if (P_TimerHead.Month == 3)
                    {
                        if (P_TimerHead.Year % 4 == 0)
                        {
                            P_dayTmp = 29;
                        }
                        else
                        {
                            P_dayTmp = 28;
                        }
                    }
                    else
                    {
                        P_dayTmp = 30;
                    }

                    if ((P_TimerHead.Month - P_TimerLast.Month == 1) && (P_TimerHead.Day == 1) && (P_TimerHead.Hour == 0) && (P_TimerHead.Minute == 0)
                        && (P_TimerLast.Day == P_dayTmp) && (P_TimerLast.Hour == 23) && (P_TimerLast.Minute == 59))
                    {
                        if (P_TimerHead.Second + 60 - P_TimerLast.Second <= errorValue)
                        {
                            res = true;
                        }
                        else
                        {
                            res = false;
                        }
                    }
                    else
                    {
                        res = false;
                    }
                }
            }
            else                                                        // 不同年 
            {
                if ((P_TimerHead.Year - P_TimerLast.Year == 1) && (P_TimerHead.Month == 1) && (P_TimerHead.Day == 1)
                    && (P_TimerHead.Hour == 0) && (P_TimerHead.Minute == 0)
                    && (P_TimerHead.Month == 12) && (P_TimerHead.Day == 31) && (P_TimerHead.Hour == 23) && (P_TimerHead.Minute == 59))
                {
                    if (P_TimerHead.Second + 60 - P_TimerLast.Second <= errorValue)
                    {
                        res = true;
                    }
                    else
                    {
                        res = false;
                    }
                }
                else
                {
                    res = false;
                }
            }
        }
    }            
    return res;
}
    原文作者:thinkBalloon
    原文地址: https://blog.csdn.net/thinkBalloon/article/details/76173287
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞