我想大家對DateTime.ToString()方法的用法肯定已經非常熟悉了,但我想大家用過的大部分用法都是:DateTime.ToString(“format”),不過本文想講述的是它的另一個重載方法DateTime.ToString("format",IFormatProvider)。 如果大家
我想大家對DateTime.ToString()方法的用法肯定已經非常熟悉了,但我想大家用過的大部分用法都是:DateTime.ToString(“format”),不過本文想講述的是它的另一個重載方法DateTime.ToString("format",IFormatProvider)。
如果大家做的項目中有多語言的需求的話,那麼肯定少不了會有的功能要顯示一個時間,由於文差異域每種語言用戶對時間格式的需求肯定是不一樣的,比如英文中的時間格式是:12/2/2013 8:20:22 PM,而德語的格式是:02.12.2013 20:20:22;這個區別還是很大的,而且如果語言種數多的話,也很難對每種特定語言的時間格式作特定的處理,而且也不利於程式的擴展性。不過萬幸的是微軟給我們提供了CultureInfo這個類,同時這個類繼承了IFormatProvider這個介面,所以我們可以利用它來得到我們想要的時間格式(其它格式也可以通過它來獲取,比哪貨幣等)。
閑話不多說,直接看代碼:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-de"); DateTime dt = Convert.ToDateTime("2013-12-2 20:20:22"); Console.WriteLine("當前語言:" + Thread.CurrentThread.CurrentCulture.DisplayName); Console.WriteLine("日期:2013-12-2 20:20:22"); Console.WriteLine("d-短日期模式: " + dt.ToString("d", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("D-長日期模式: " + dt.ToString("D", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("f-完整日期/時間模式(短時間): " + dt.ToString("f", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("F-完整日期/時間模式(長時間): " + dt.ToString("F", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("g-常規日期/時間模式(短時間): " + dt.ToString("g", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("G-常規日期/時間模式(長時間): " + dt.ToString("G", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("m-月日模式(m): " + dt.ToString("m", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("M-月日模式(M): " + dt.ToString("M", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("o-往返日期/時間模式: " + dt.ToString("o", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("R-RFC1123 模式: " + dt.ToString("R", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("s-可排序的日期/時間模式;符合 ISO 8601: " + dt.ToString("s", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("t-短時間模式: " + dt.ToString("t", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("T-長時間模式: " + dt.ToString("T", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("u-通用的可排序日期/時間模式: " + dt.ToString("u", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("U-通用的可排序日期/時間模式: " + dt.ToString("U", Thread.CurrentThread.CurrentCulture)); Console.WriteLine("Y-年月模式: " + dt.ToString("Y", Thread.CurrentThread.CurrentCulture)); Console.WriteLine(dt.ToString("yyyyMMdd")); Console.ReadLine();
在實際應用中,我們可以把第一行的“de-de“換成用戶切換的語言,然後通過設置當前的線程語言為當前語言種類,那麼我們就可以在程式的任一位置通過”Thread.CurrentThread.CurrentCulture”來獲得。以前運行結果對比如下:
(圖片顯示不完整可以右鍵複製地址後,重開一個頁面單獨顯示圖片)
從結果可以知道,如果想通過CultureInfo來得到不同的語言格式,那麼就不能用"yyyyMMdd","yyyy-MM-dd"等這種自定義格式。
附:得到貨幣格式的寫法為:decimal d = 123659.256M; d.ToString("c", Thread.CurrentThread.CurrentCulture.NumberFormat);