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

C# 利用 CultureInfo 依語系自動產在地化日期時間格式

     編輯:關於C語言

許多開發者對 DateTime.ToString("format") 這種帶格式字串的多載已相當熟悉,但若專案需支援多國語系,硬編碼格式字串不僅難以維護,也違反國際化設計原則。這時候,DateTime.ToString(string format, IFormatProvider provider) 這個鮮少被提及的多載才是關鍵——配合 CultureInfo 即可依執行緒目前語系自動輸出當地慣用的日期時間格式。

為什麼需要 CultureInfo?

以 2013/12/02 20:20:22 為例,英文(en-US)慣用 12/2/2013 8:20:22 PM,德文(de-DE)則是 02.12.2013 20:20:22,中文(zh-TW)常見 2013/12/2 下午 08:20:22。若語系一多,逐一寫死格式字串顯然不現實。CultureInfo 實作 IFormatProvider,內建各文化特性的日期、數字、貨幣格式規則,直接傳入即可獲得在地化結果。

實作範例

// 設定目前執行緒文化特性(實務上依使用者選擇動態切換)
Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-TW");

DateTime dt = DateTime.Parse("2013-12-02 20:20:22");
var ci = Thread.CurrentThread.CurrentCulture;

Console.WriteLine($"當前語系:{ci.DisplayName}");
Console.WriteLine($"d (短日期)   :{dt.ToString("d", ci)}");
Console.WriteLine($"D (長日期)   :{dt.ToString("D", ci)}");
Console.WriteLine($"f (完整日期短時間):{dt.ToString("f", ci)}");
Console.WriteLine($"F (完整日期長時間):{dt.ToString("F", ci)}");
Console.WriteLine($"g (一般日期短時間):{dt.ToString("g", ci)}");
Console.WriteLine($"G (一般日期長時間):{dt.ToString("G", ci)}");
Console.WriteLine($"t (短時間)   :{dt.ToString("t", ci)}");
Console.WriteLine($"T (長時間)   :{dt.ToString("T", ci)}");
Console.WriteLine($"o (往返格式) :{dt.ToString("o", ci)}");
Console.WriteLine($"R (RFC1123)  :{dt.ToString("R", ci)}");
Console.WriteLine($"s (ISO 8601) :{dt.ToString("s", ci)}");
Console.WriteLine($"u (通用可排序):{dt.ToString("u", ci)}");
Console.WriteLine($"U (UTC 完整) :{dt.ToString("U", ci)}");
Console.WriteLine($"M/m (月日)   :{dt.ToString("M", ci)}");
Console.WriteLine($"Y/y (年月)   :{dt.ToString("Y", ci)}");

執行結果對照(節錄)

不同標準格式在 zh-TW 下的輸出結果

關鍵提醒

  • 標準格式字元(d, D, f, F, g, G, t, T 等)會自動套用 CultureInfo.DateTimeFormat 定義的模式。
  • 自訂格式字串如 "yyyyMMdd"、"yyyy-MM-dd" 不會 受文化特性影響,若需在地化請改用標準格式字元。
  • 貨幣、數字格式同理,可用 value.ToString("c", ci.NumberFormat) 取得當地貨幣表示法。

CultureInfo 命名規則速查

文化特性名稱遵循 RFC 1766:<languagecode2>-<country/regioncode2>(如 zh-TW、en-US、de-DE)。.NET 內建上百種預定義文化特性,涵蓋語言、地區、曆法、排序規則等,詳見 System.Globalization 命名空間文件。

善用 CultureInfo 搭配標準格式字元,即可以極低成本實現真正的多語系日期時間顯示,程式碼更簡潔、擴充性更佳。

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