日期時間處理是業務開發的高頻需求。C# 提供 DateTime(時間點)、TimeSpan(時間間隔)兩大核心結構,支援豐富的建構、格式化、運算與時區轉換功能。本文系統整理常用操作模式。
DateTime dt1 = new DateTime(2004, 10, 19); // 日期
DateTime dt2 = new DateTime(2004, 10, 19, 22, 47, 35); // 日期+時間
DateTime dt3 = new DateTime(2004, 10, 19, 22, 47, 35, 259); // 含毫秒
Console.WriteLine(dt1); // 2004/10/19 上午 12:00:00
Console.WriteLine(dt2); // 2004/10/19 下午 10:47:35
Console.WriteLine(dt3); // 2004/10/19 下午 10:47:35
string fmt = System.DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
Console.WriteLine(fmt); // 例: 2024-01-15-03-45-30
常用格式字元:yyyy年 MM月 dd日 HH24時 hh12時 mm分 ss秒 fff毫秒。
TimeSpan oneWeek = new TimeSpan(4, 12, 0, 0) + new TimeSpan(2, 12, 0, 0);
// 4天12時 + 2天12時 = 7天
DateTime now = DateTime.Now;
DateTime past = now - oneWeek; // 7天前
Console.WriteLine(oneWeek.ToString()); // 7.00:00:00
Console.WriteLine(now.ToString());
Console.WriteLine(past.ToString());
TimeSpan 建構子參數:(days, hours, minutes, seconds),亦可傳入 ticks。
DateTime baseTime = DateTime.Now;
Console.WriteLine("現在: " + baseTime);
Console.WriteLine("+10年: " + baseTime.AddYears(10));
Console.WriteLine("+11月: " + baseTime.AddMonths(11));
Console.WriteLine("+7天: " + baseTime.AddDays(7));
Console.WriteLine("+12時: " + baseTime.AddHours(12));
Console.WriteLine("+30分: " + baseTime.AddMinutes(30));
Console.WriteLine("+45秒: " + baseTime.AddSeconds(45));
Console.WriteLine("+100毫秒: " + baseTime.AddMilliseconds(100));
Console.WriteLine("-1天: " + baseTime.AddDays(-1)); // 減法同樣適用
所有 AddXXX 方法回傳新 DateTime,原值不變(不可變結構)。
DateTime local = DateTime.Now; // 本地時間
DateTime utc = DateTime.UtcNow; // UTC 時間
DateTime utcFromLocal = local.ToUniversalTime(); // 本地轉 UTC
DateTime localFromUtc = utc.ToLocalTime(); // UTC 轉本地
// 指定種類
DateTime dt = new DateTime(2024,1,1,12,0,0, DateTimeKind.Utc);
Console.WriteLine(dt.Kind); // Utc
最佳實踐:資料庫儲存、跨系統傳輸統一使用 UTC;僅在 UI 顯示時轉為本地時間。
DateTime start = DateTime.Now;
// ... 執行某操作 ...
DateTime end = DateTime.Now;
TimeSpan elapsed = end - start;
Console.WriteLine($"耗時: {elapsed.TotalMilliseconds} ms");
string input = "2024-01-15 14:30:00";
if (DateTime.TryParse(input, out DateTime result))
Console.WriteLine("解析成功: " + result);
else
Console.WriteLine("格式錯誤");
// 指定格式解析
DateTime exact = DateTime.ParseExact("15/01/2024", "dd/MM/yyyy", CultureInfo.InvariantCulture);
DateOnly / TimeOnly:純日期/純時間類型,避免時區干擾TimeZoneInfo 完整支援 IANA 時區資料庫DateTime.UnixEpoch、DateTimeOffset.ToUnixTimeSeconds() 互轉掌握 DateTime/TimeSpan 核心運算與格式化,能高效解決 90% 以上的業務時間處理需求。