System.DateTime運算小範例(時間差距、同日判斷)

.NET Framework的System.DateTime類別其實非常的強大,也在所有的專案中被大量地使用。但是有些小地方就算你的程式設計技巧已看過千山萬水,還是有可能會犯錯(或者是繞遠路),因此在這邊分享兩個小技巧。

計算兩個日期時間物件總共差距多少分鐘(差距幾分鐘)

一般來說,我們會直覺地想到DateTime.Subtract方法,因此我們馬上寫下程式碼如下:

static void Main(string[] args)
{
  DateTime t1 = new DateTime(2015, 10, 15, 14, 10, 00);
  DateTime t2 = new DateTime(2015, 10, 15, 19, 38, 00);
  WriteLine(t2.Subtract(t1).Minutes);  //28
}

上述程式碼,請問回傳的差距分鐘數為?答案是28分鐘。因為Minutes屬性真的就只會回傳你分鐘數而已,誰管你幾小時、幾秒。正確的用法要採用TotalDays、TotalHours、TotalMinutes、TotalSeconds、TotalMilliseconds,希望下次要提醒自己多小心點。服用下方正確的程式碼後,答案就是正確的328分鐘。

static void Main(string[] args)
{
  DateTime t1 = new DateTime(2015, 10, 15, 14, 10, 00);
  DateTime t2 = new DateTime(2015, 10, 15, 19, 38, 00);
  WriteLine(new TimeSpan(t2.Ticks - t1.Ticks).TotalMinutes);  //328
}

計算兩個日期時間物件是否為同日(同一天)

這個問題不是BUG的問題,而是效能與程式碼精簡度的問題。往往我們看到這個題目一定直覺地想,這不困難吧,把時間的年、月、日拿出來一起判斷,不就知道是同一天了嗎?當然可以,程式碼如下:

static void Main(string[] args)
{
  DateTime t1 = new DateTime(2015, 10, 15, 14, 10, 00);
  DateTime t2 = new DateTime(2015, 10, 15, 19, 38, 00);
  
  if (t1.Year == t2.Year && 
      t1.Month == t2.Month &&
      t1.Day == t2.Day)
  { 
    //BraBra...
  }
}

遜!下面的寫法簡潔、易懂、效率更高:

static void Main(string[] args)
{
  DateTime t1 = new DateTime(2015, 10, 15, 14, 10, 00);
  DateTime t2 = new DateTime(2015, 10, 15, 19, 38, 00);
  
  if (DateTime.Compare(t1.Date, t2.Date) == 0)
  { 
    //BraBra...
  }
}

相關連結:

System.DateTime運算小範例(迄今時間計算:年月天)

System.DateTime Comapre Subtract Diff