1. 程式人生 > 實用技巧 >C#中時間比較的方法

C#中時間比較的方法

哈嘍,我又來了。

今天分享一個在C#中時間比較的方法,可能好多人都知道。

寫這個是因為之前有一個需求是比較當日的時間。

與日期無關,只和時間有關。

比如2021年10月1日的11點30分 的時間部分(11點30分)是否在 2018年的9點之後,如果看日期,肯定是不在的,但如果只看時間,是在之後的。

那麼反過來也一樣是否在2018年的18點之前呢,一樣在的。

這裡的判斷首先就用到C#中我們自帶的DateTime了

DateTime中有一個屬性叫做TimeOfDay,這個是專門用於獲取日期的時間部分,在TimeOfDay中有一個CompareTo的方法

用它就可以輕鬆完成比較,被比較時間大於比較時間 返回 -1 ,小於比較時間返回 1

下面來看下程式碼

        DateTime currentTime = new DateTime(2018, 1, 1, 11, 30, 0);
            DateTime StartTime = new DateTime(2019, 1, 14, 10, 30, 0);
            DateTime EndTime = new DateTime(2021, 1, 14, 18, 30, 0);


            Console.WriteLine("===============Before change :" + currentTime.IsPriorTo(StartTime));
currentTime = currentTime.AddHours(-2);
Console.WriteLine("===============After change :" + currentTime.IsPriorTo(StartTime));
        
       public static bool IsPriorTo(this DateTime thisTime,DateTime compareTime)
  {
  return compareTime.TimeOfDay.CompareTo(thisTime.TimeOfDay) == 1;
  }

上面這是個擴充套件方法,這樣寫看起來語句是要通順一些的。

結果我們列印看一下

既然都說到這裡了,就順路在說一下判斷當前時間是否在 “開始” 和“結束”區間內怎麼寫

     public static bool IsInside(this DateTime thisTime,DateTime startTime,DateTime endTime)
        {
            return startTime.TimeOfDay.CompareTo(thisTime.TimeOfDay) == -1 && endTime.TimeOfDay.CompareTo(thisTime.TimeOfDay) == 1
; }

當然,這個寫法是給直接拿去用的小夥伴來使用,那麼既然剛剛我們已經封裝過了一個時間比較方法了,何不拿來使用呢?

        public static bool IsInside(this DateTime thisTime,DateTime startTime,DateTime endTime)
        {
            return startTime.IsPriorTo(thisTime) && endTime.IsPriorTo(thisTime) == false;
        }

最後的 == False 是為了保證 && 時候的條件

好了,今天的分享就到這裡。