Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> Web 伺服器

解決 IIS 時間格式錯誤導致 ASP.NET 日期顯示異常:註冊表與控制台雙重修正

編輯:Web 伺服器

現象

ASP.NET 頁面輸出日期時間多出「上午/下午」中文字樣(如 2024/1/1 上午 10:00:00),導致 DateTime.Parse、資料庫寫入、JSON 序列化失敗。

根因

IIS 工作進程繼承的系統區域設定包含「上午/下午」標記,而預設日期時間格式不符合 yyyy-MM-dd HH:mm:ss 標準格式。

方法一:控制台區域選項修正(圖形介面)

  1. 控制台 → 「日期、時間、語言和區域選項」→「變更數字、日期和時間的格式」。
  2. 「區域選項」標籤 →「自訂」→「時間」標籤。
  3. 時間格式改為 HH:mm:ss(24 小制,無 AM/PM)。
  4. 日期格式改為 yyyy-M-d 或 yyyy-MM-dd。
  5. 確定套用,重啟 IIS(iisreset) 生效。

方法二:註冊表強制修正(適用無介面/自動化部署)

  1. 開啟 regedit,定位:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLEAUT
    (若無 OLEAUT 金鑰,右鍵 Microsoft → 新增 → 金鑰 → 命名 OLEAUT)。
  2. 在右側新建 DWORD (32 位元) 值:
    名稱:VarConversionLocaleSetting
    數值:2(十六進位或十進位皆可)。
  3. 重啟 IIS(iisreset)或重開機。

註冊表數值含義

值行為
0預設,使用目前使用者區域設定
1使用 .DEFAULT 使用者區域設定
2強制使用系統預設區域設定(忽略使用者自訂),解決 AM/PM 問題

驗證腳本

<%@ Page Language="C#" %>
<%
    DateTime now = DateTime.Now;
    string s = now.ToString("yyyy-MM-dd HH:mm:ss");
    Response.Write("伺服器時間:" + s);
    if (now.ToString() != s) Response.Write(" (格式不規範)");
%>

部署此 .aspx 頁面,輸出若無紅字即格式正確。

注意事項

  • 修改註冊表影響整台機器所有應用程式的日期轉換行為,請在測試環境驗證後再上生產。
  • 若應用程式需支援多語系/多區域,建議在程式碼明確指定 CultureInfo.InvariantCulture 或特定 CultureInfo 進行格式化/解析,而非依賴系統預設。
  • Ghost/精簡版系統常缺少 OLEAUT 金鑰,手動建立即可。
Copyright © Windows教程網 All Rights Reserved