| 方式 | 程式碼 | 說明 |
|---|---|---|
| 建構函式 | new DateTime(2004, 10, 19) | 年月日,時間為 00:00:00 |
| 含時間 | new DateTime(2004, 10, 19, 22, 47, 35) | 時分秒 |
| 含毫秒 | new DateTime(2004, 10, 19, 22, 47, 35, 259) | 毫秒 |
| 當前本地時間 | DateTime.Now | 含時區資訊 Kind=Local |
| 當前 UTC 時間 | DateTime.UtcNow | Kind=Utc,高效能、無時區轉換 |
| 當前日期 | DateTime.Today | 時間歸零 |
DateTime now = DateTime.Now;
// 標準格式
Console.WriteLine(now.ToString("d")); // 短日期
Console.WriteLine(now.ToString("D")); // 長日期
Console.WriteLine(now.ToString("t")); // 短時間
Console.WriteLine(now.ToString("T")); // 長時間
Console.WriteLine(now.ToString("f")); // 完整日期時間(短時間)
Console.WriteLine(now.ToString("F")); // 完整日期時間(長時間)
Console.WriteLine(now.ToString("g")); // 一般(短日期+短時間)
Console.WriteLine(now.ToString("G")); // 一般(短日期+長時間)
Console.WriteLine(now.ToString("u")); // 通用可排序 yyyy-MM-dd HH:mm:ssZ
Console.WriteLine(now.ToString("o")); // 往返格式 yyyy-MM-ddTHH:mm:ss.fffffffK
// 自訂格式
string custom = now.ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.WriteLine(custom); // 2024-01-15 14:30:45.123

// 從時間單位建構
TimeSpan ts1 = new TimeSpan(4, 12, 0, 0); // 4天12小時
TimeSpan ts2 = new TimeSpan(2, 12, 0, 0); // 2天12小時
TimeSpan total = ts1 + ts2; // 7天
// 從 DateTime 相減得到
DateTime start = DateTime.Now;
DateTime end = start.AddHours(2.5);
TimeSpan diff = end - start; // 2.5小時
| 屬性 | 說明 | 範例 (7.5天) |
|---|---|---|
Days | 整天數 | 7 |
Hours | 剩餘小時 (0-23) | 12 |
Minutes | 剩餘分鐘 (0-59) | 0 |
Seconds | 剩餘秒數 (0-59) | 0 |
Milliseconds | 剩餘毫秒 (0-999) | 0 |
TotalDays | 總天數 (double) | 7.5 |
TotalHours | 總小時數 | 180 |
TotalMinutes | 總分鐘數 | 10800 |
TotalSeconds | 總秒數 | 648000 |
TotalMilliseconds | 總毫秒數 | 648000000 |
TimeSpan ts = new TimeSpan(7, 12, 30, 15, 500);
Console.WriteLine(ts.ToString()); // 7.12:30:15.5000000
Console.WriteLine(ts.ToString(@"dd\.hh\:mm\:ss")); // 07.12:30:15

所有運算方法回傳新實例,原物件不變:
| 方法 | 範例 | 說明 |
|---|---|---|
AddYears | dt.AddYears(10) | 加減年 |
AddMonths | dt.AddMonths(-3) | 加減月(自動處理月末) |
AddDays | dt.AddDays(7) | 加減天 |
AddHours | dt.AddHours(12) | 加減時 |
AddMinutes | dt.AddMinutes(30) | 加減分 |
AddSeconds | dt.AddSeconds(45) | 加減秒 |
AddMilliseconds | dt.AddMilliseconds(500) | 加減毫秒 |
Add | dt.Add(TimeSpan.FromDays(1)) | 加減 TimeSpan |
Subtract | dt.Subtract(otherDt) | 相減得 TimeSpan |

| Kind | 含義 | 行為 |
|---|---|---|
Unspecified | 無時區資訊 | 不進行任何轉換,序列化保持原樣 |
Utc | UTC 時間 | 轉本地時自動加時差,ToString 顯示 Z |
Local | 本地時間 | 轉 UTC 自動減時差,跨時區序列化需注意 |
DateTime local = DateTime.Now;
DateTime utc = local.ToUniversalTime(); // Local → Utc
DateTime local2 = utc.ToLocalTime(); // Utc → Local
DateTime unspecified = new DateTime(2024, 1, 1, 12, 0, 0); // Kind=Unspecified
DateTime asUtc = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);
DateTime asLocal = DateTime.SpecifyKind(unspecified, DateTimeKind.Local);
TimeZoneInfo taipei = TimeZoneInfo.FindSystemTimeZoneById("Taipei Standard Time");
DateTime utc = DateTime.UtcNow;
DateTime taipeiTime = TimeZoneInfo.ConvertTimeFromUtc(utc, taipei);
DateTime.UtcNow:避免本地時區查詢開銷DateTime.Now:快取當前時間DateTimeKind.Utc:防止反序列化時區錯位Instant、ZonedDateTime、LocalDateTime 等更嚴謹型別DateTime 代表時間點,TimeSpan 代表時間間隔,兩者結合支援完整的日期時間運算。核心原則:不可變運算、明確時區、統一 UTC 儲存、自訂格式化輸出。掌握 Kind、TimeZoneInfo、標準/自訂格式字串,即能處理 99% 的業務時間需求。