一個算法:關於如何判斷兩個時間是否在允許誤差內相等

說明:以下文中本人使用的是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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章