2023-05-15 (yyyy-M-d),升級後變 2023/05/15 (yyyy/M/d)。HKEY_CURRENT_USER\Control Panel\International (僅當前用戶)。HKEY_USERS\.DEFAULT\Control Panel\International (系統預設用戶配置檔)。regedit。HKEY_USERS\.DEFAULT\Control Panel\International。yyyy-M-d (短日期格式,必改)- (日期分隔符,建議同步修改)iisreset 重啟 IIS (或回收應用程式池)。DateTime.Now.ToString("d") 的頁面,應顯示 2023-05-15。控制面板 → 區域和語言 → 格式 → 短日期
↓ 寫入
HKEY_CURRENT_USER\Control Panel\International (當前登入用戶)
↓ 不影響
HKEY_USERS\.DEFAULT\Control Panel\International (系統帳號/服務帳號預設)
↓ IIS 工作進程讀取此處
日期格式仍為舊值 (yyyy/MM/dd)
<%@ Page Language="C#" %>
<%
Response.Write("CurrentCulture: " + System.Threading.Thread.CurrentThread.CurrentCulture.Name + "
");
Response.Write("DateTimeFormat.ShortDatePattern: " + System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern + "
");
Response.Write("DateTime.Now.ToString('d'): " + DateTime.Now.ToString("d") + "
");
Response.Write("DateTime.Now.ToString('yyyy-M-d'): " + DateTime.Now.ToString("yyyy-M-d") + "
");
%>
<configuration>
<system.web>
<globalization culture="zh-CN" uiCulture="zh-CN" />
</system.web>
</configuration>
// 當前執行緒
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy-M-d";
// ASP.NET Core
var culture = new CultureInfo("zh-CN");
culture.DateTimeFormat.ShortDatePattern = "yyyy-M-d";
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
| 誤區 | 正確認知 |
|---|---|
| 以為控制面板改了就全局生效 | 僅影響當前互動用戶,服務帳號讀取 .DEFAULT 配置檔 |
| 只改 sShortDate 不改 sDate | 分隔符不一致可能導致解析歧義,建議同步設為 '-' |
| 改完註冊表不重啟 IIS | 工作進程啟動時快取文化特性,必須回收/重啟生效 |
| 以為 .NET 4.0 會自動適配 | 框架遵循 OS 設定,不會「智能猜測」你想要的格式 |
IIS 升級日期格式錯亂 = 系統帳號文化特性配置檔 (.DEFAULT) 未同步。
註冊表 HKEY_USERS\.DEFAULT\Control Panel\International → sShortDate=yyyy-M-d, sDate=- → iisreset 一鍵治愈。
雙重保險:web.config globalization + 代碼級強制指定,消除環境依賴,實現「代碼決定格式,環境不再綁架業務」。