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

ASP.NET 日期時間格式化完全手冊:6 大核心方法與自定義格式字符速查表

     編輯:ASP.NET 基礎

前言

日期時間格式化是 ASP.NET 開發中最高頻的操作之一。本文系統整理 6 大核心格式化方法,並附贈 標準/自定義格式字符完整速查表,助你應對各種顯示、綁定、序列化場景。

六大核心格式化方法

1. 數據綁定控件聲明式格式化(GridView/Repeater/ListView)

最推薦用於數據展示層,關注點分離,無需後台代碼。

<!-- BoundField / BoundColumn -->
<asp:BoundField DataField="CreateTime" HeaderText="創建時間" 
    DataFormatString="{0:yyyy-MM-dd HH:mm}" HtmlEncode="false" />

<!-- TemplateField 內 Eval -->
<asp:TemplateField HeaderText="更新時間">
    <ItemTemplate>
        <%# Eval("UpdateTime", "{0:yyyy/MM/dd}") %>
    </ItemTemplate>
</asp:TemplateField>

2. DataBinder.Eval 動態綁定格式化

適用於代碼後台動態構建模板或複雜邏輯判斷。

// 後台代碼
string formatted = DataBinder.Eval(dataItem, "OrderDate", "{0:yyyy年MM月dd日}");
// 或直接在 .aspx 內
<%# DataBinder.Eval(Container.DataItem, "ShipDate", "{0:d}") %>

3. DateTime.ToString —— 最基礎、最通用

所有格式化的核心,支援標準/自定義格式字符,效能最優。

DateTime now = DateTime.Now;
now.ToString("yyyy-MM-dd");           // 2024-01-15
now.ToString("yyyy-MM-dd HH:mm:ss");  // 2024-01-15 14:30:05
now.ToString("yyyy/MM/dd HH:mm");     // 2024/01/15 14:30
now.ToString("yyyy年MM月dd日");        // 2024年01月15日(中文場景)

4. String.Format / 插值字符串 —— 多值組合場景

// String.Format
string log = String.Format("用戶 {0} 於 {1:yyyy-MM-dd HH:mm} 登入", userName, loginTime);

// C# 6+ 插值字符串(推薦,編譯期檢查)
string log = $"用戶 {userName} 於 {loginTime:yyyy-MM-dd HH:mm} 登入";

5. DateTime.Parse / TryParse —— 字符串轉日期後再格式化

處理用戶輸入、外部 API 返回的字符串日期。

string input = "2024-01-15 14:30:00";
if (DateTime.TryParse(input, out DateTime dt))
{
    string output = dt.ToString("yyyy/MM/dd");
}
// 含文化特定格式
DateTime.ParseExact("15/01/2024", "dd/MM/yyyy", CultureInfo.InvariantCulture);

6. Convert.ToDateTime —— 強類型轉換,空值拋異常

適用於確信非 null 的數據庫字段、ViewState、Session 取值。

object val = Session["LastLogin"];
if (val != null)
{
    DateTime dt = Convert.ToDateTime(val);
    string fmt = dt.ToString("yyyy-MM-dd");
}

標準格式字符速查表(區分大小寫)

字符名稱範例輸出 (en-US)說明
d短日期1/15/2024ShortDatePattern
D長日期Monday, January 15, 2024LongDatePattern
f完整日期短時間Monday, January 15, 2024 2:30 PMLongDate + ShortTime
F完整日期長時間Monday, January 15, 2024 2:30:05 PMFullDateTimePattern
g常規短時間1/15/2024 2:30 PMShortDate + ShortTime
G常規長時間1/15/2024 2:30:05 PMShortDate + LongTime
M/m月日January 15MonthDayPattern
R/rRFC1123Mon, 15 Jan 2024 14:30:05 GMTHTTP/Email 標準
s可排序2024-01-15T14:30:05ISO 8601 本地時間
t短時間2:30 PMShortTimePattern
T長時間2:30:05 PMLongTimePattern
u通用可排序2024-01-15 14:30:05ZUTC 時間,ISO 8601
U完整 UTCMonday, January 15, 2024 6:30:05 AMLongDate + LongTime (UTC)
Y/y年月January, 2024YearMonthPattern

自定義格式字符核心子集

字符含義範例
yyyy四位年份2024
yy兩位年份24
MM兩位月份01
M不補零月份1
MMM月份縮寫Jan
MMMM月份全名January
dd兩位日期15
d不補零日期15
ddd星期縮寫Mon
dddd星期全名Monday
HH24小時制兩位14
H24小時制不補零14
hh12小時制兩位02
mm兩位分鐘30
ss兩位秒05
fff毫秒三位123
ttAM/PMPM
zz時區偏移小時+08
zzz時區偏移完整+08:00
\\轉義字面量yyyy\\年 → 2024年
'text'單引號包裹字面量yyyy'年' → 2024年

實戰最佳實踐

  1. 統一文化:全站設定 CultureInfo.CurrentCulture = new CultureInfo("zh-CN") 或在 web.config ``,避免伺服器區域導致格式不一致。
  2. 儲存用 UTC:資料庫存 DateTime.UtcNow,顯示時轉換至用戶時區:TimeZoneInfo.ConvertTimeFromUtc(utc, userTimeZone)。
  3. 避免魔術字符串:定義常量類 DateFormats.ShortDate = "yyyy-MM-dd",統一維護。
  4. 序列化用 ISO 8601:JSON/API 交互統一用 o (Round-trip) 或 s 格式:dt.ToString("o") → 2024-01-15T14:30:05.1234567+08:00。
  5. 性能敏感用 ToString:ToString 比 String.Format 快 2-3 倍,高頻日誌記錄優先用 ToString。

常見錯誤對照表

錯誤寫法問題正確寫法
ToString("YYYY-MM-dd")YYYY 是週年,跨年週會導致年份錯誤ToString("yyyy-MM-dd")
ToString("mm")mm 是分鐘,非月份ToString("MM")
ToString("hh:mm")12小時制無 AM/PM 會混淆ToString("HH:mm") 或 ToString("hh:mm tt")
String.Format("{0:D}", dt) 配合 zh-CN長日期格式過長(2024年1月15日 星期一)改用自定義 "yyyy年M月d日"

總結

掌握 ToString 自定義格式 為核心,配合 DataFormatString 聲明式綁定、ISO 8601 序列化、UTC 儲存+時區轉換 顯示,即可覆蓋 100% ASP.NET 日期時間格式化場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved