首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# DateTime 格式化完整指南:標準/自訂格式、文化特性與效能優化

     編輯:關於C#

標準格式字串 (單一字元)

格式說明範例 (en-US)範例 (zh-TW)
d短日期6/15/20232023/6/15
D長日期Thursday, June 15, 20232023年6月15日
f完整日期短時間Thursday, June 15, 2023 3:30 PM2023年6月15日 下午 03:30
F完整日期長時間Thursday, June 15, 2023 3:30:45 PM2023年6月15日 下午 03:30:45
g一般日期短時間6/15/2023 3:30 PM2023/6/15 下午 03:30
G一般日期長時間6/15/2023 3:30:45 PM2023/6/15 下午 03:30:45
M/m月日June 156月15日
O/oISO 8601 往返格式2023-06-15T15:30:45.1234567(同)
R/rRFC 1123Thu, 15 Jun 2023 15:30:45 GMT(同)
s可排序日期時間 (ISO 8601 無時區)2023-06-15T15:30:45(同)
t短時間3:30 PM下午 03:30
T長時間3:30:45 PM下午 03:30:45
u通用可排序 (UTC)2023-06-15 15:30:45Z(同)
U完整日期長時間 (UTC)Thursday, June 15, 2023 11:30:45 PM2023年6月15日 上午 11:30:45
Y/y年月June 20232023年6月

自訂格式字元 (可組合)

字元意義範例
y年 (1-2 碼)23
yy年 (2 碼)23
yyyy年 (4 碼)2023
M月 (1-2 碼)6
MM月 (2 碼)06
MMM月縮寫Jun / 6月
MMMM月全名June / 六月
d日 (1-2 碼)15
dd日 (2 碼)15
ddd星期縮寫Thu / 週四
dddd星期全名Thursday / 星期四
h12小時制 (1-2 碼)3
hh12小時制 (2 碼)03
H24小時制 (1-2 碼)15
HH24小時制 (2 碼)15
m分 (1-2 碼)30
mm分 (2 碼)30
s秒 (1-2 碼)45
ss秒 (2 碼)45
f..fffffff秒小數位 (1-7 碼).1 / .12 / .1234567
tAM/PM 首字元P / 午
ttAM/PM 全稱PM / 下午
z時區時差 (小時)+8
zz時區時差 (小時 2碼)+08
zzz時區時差 (時:分)+08:00
:時間分隔符 (依文化):
/日期分隔符 (依文化)/
'text'常值字串'Year: 'yyyy → Year: 2023
\c跳脫單一字元\: → :

文化特性控制


var dt = new DateTime(2023, 6, 15, 15, 30, 45);
var tw = new CultureInfo("zh-TW");
var us = new CultureInfo("en-US");
var jp = new CultureInfo("ja-JP");

Console.WriteLine(dt.ToString("D", tw)); // 2023年6月15日
Console.WriteLine(dt.ToString("D", us)); // Thursday, June 15, 2023
Console.WriteLine(dt.ToString("yyyy年M月d日", CultureInfo.InvariantCulture)); // 固定格式,不受文化影響

高效能格式化

常見陷阱

  • yyyy vs YYYY:`YYYY` 是週年 (ISO 8601 週曆),跨年週會導致年份錯誤,**永遠用 `yyyy`**。
  • mm vs MM:`mm` 是分鐘,`MM` 是月份。**嚴格區分大小寫**。
  • 單一字元自訂格式:`dt.ToString("d")` 是標準短日期,**自訂單字元需 `%d` 或 `"d "`** (加空白)。
  • 時區轉換:`DateTime.Kind` (Unspecified/Utc/Local) 影響 `ToString("O")` 輸出 Z/+00:00,儲存/傳輸建議統一 UTC。

總結

掌握 **標準格式 (單字元)** 、**自訂格式字元 (大小寫敏感)** 、**文化特性 (IFormatProvider)** 三大支柱,並避開 `yyyy/YYYY`、`mm/MM`、時區、`Kind` 等經典坑洞。高效能場景改用 `Utf8Formatter` 或手寫格式化。統一儲存 UTC、顯示時再按文化轉換,是國際化系統的最佳實務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景建議做法
高頻呼叫 (每秒 > 10 萬)避免 `ToString` 配置字串,改用 `StringBuilder` + `AppendFormat` 或手寫格式化
固定格式 (如 log 時間戳)預先建立 `DateTimeFormatInfo` 快取,或用 `Utf8Formatter` (NET Core 2.1+) 直接寫入 `Span`
資料庫參數勿格式化字串,直接傳 `DateTime` 參數化查詢
JSON 序列化使用 `JsonSerializerOptions` 設定 `DateTimeFormat = "O"` (ISO 8601 往返)