System.DateTime 是 .NET 處理日期時間的核心結構,本文整理開發中最常用的四大場景:取得月份天數、計算時間差、24 小時制格式化、判斷兩個時間區間是否重疊。
int days = DateTime.DaysInMonth(2024, 2); // 2024 是閏年,回傳 29
DateTime dt1 = new DateTime(2024, 1, 15, 10, 30, 0);
DateTime dt2 = new DateTime(2024, 1, 10, 8, 0, 0);
TimeSpan diff = dt1 - dt2; // dt1 較晚,結果為正
Console.WriteLine($"總天數:{diff.TotalDays:F2}"); // 5.104...
Console.WriteLine($"整數天數:{diff.Days}"); // 5
Console.WriteLine($"小時:{diff.Hours}"); // 2
Console.WriteLine($"分鐘:{diff.Minutes}"); // 30
Console.WriteLine($"秒數:{diff.Seconds}"); // 0
// 若 dt1 < dt2,TotalDays 為負數,Days 為 -6 (向下取整)
提醒:Days 只回傳整數天數部分 (捨去小數),TotalDays 含小數完整天數。
| 格式字串 | 輸出範例 | 說明 |
|---|---|---|
yyyy-MM-dd HH:mm:ss | 2024-01-15 14:30:05 | 24 小時制 (大寫 HH) |
yyyy-MM-dd hh:mm:ss | 2024-01-15 02:30:05 | 12 小時制 (小寫 hh),需搭配 tt 顯示 AM/PM |
yyyy-MM-dd HH:mm:ss.fff | 2024-01-15 14:30:05.123 | 含毫秒 |
yyyy/MM/dd | 2024/01/15 | 自訂分隔符 |
// DateTimePicker 設定 24 小時制
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy-MM-dd HH:mm:ss";
區間 A:[AStart, AEnd],區間 B:[BStart, BEnd]。
重疊條件:AStart ≤ BEnd 且 AEnd ≥ BStart
bool IsOverlap(DateTime aStart, DateTime aEnd, DateTime bStart, DateTime bEnd)
{
return aStart <= bEnd && aEnd >= bStart;
}
// 使用範例
var aStart = new DateTime(2024, 1, 1);
var aEnd = new DateTime(2024, 1, 10);
var bStart = new DateTime(2024, 1, 5);
var bEnd = new DateTime(2024, 1, 15);
bool overlap = IsOverlap(aStart, aEnd, bStart, bEnd); // true
此邏輯包含「端點相接」視為重疊;若需排除端點相接,將 <= 改為 <、>= 改為 >。
DateTime.Now / DateTime.UtcNow — 本地/UTC 現在時間DateTime.Today — 今天 00:00:00DateTime.Parse / TryParse / ParseExact — 字串轉換dt.AddDays(7)、dt.AddMonths(1)、dt.AddYears(-1) — 日期運算dt.DayOfWeek — 取得星期幾 (列舉)