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運算小範例(迄今時間計算:年月天)