我想大家對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("zh-cn");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);
關于CultureInfo 類
CultureInfo 類保存區域性特定的信息,如關聯的語言、子語言、國家/地區、日歷和區域性約定。此類還提供對 DateTimeFormatInfo、NumberFormatInfo、CompareInfo 和 TextInfo 的區域性特定實例的訪問。這些對象包含區域性特定操作(如大小寫、格式化日期和數字以及比較字符串)所需的信息。
區域性名稱和標識符
區域性名稱遵循 RFC 1766 標準,格式為“<languagecode2>-<country/regioncode2>”,其中 <languagecode2> 是從 ISO 639-1 派生的由兩個小寫字母構成的代碼,<country/regioncode2> 是從 ISO 3166 派生的由兩個大寫字母構成的代碼。例如,美國英語為“en-US”。在雙字母語言代碼不可用的情況中,將使用從 ISO 639-2 派生的三字母代碼;例如,三字母代碼“div”用于使用 Dhivehi 語言的區域。某些區域性名稱帶有指定書寫符號的后綴;例如“-Cyrl”指定西里爾語書寫符號,“-Latn”指定拉丁語書寫符號。
System.Globalization 命名空間中的此類和其他類接受并使用下列預定義的區域性名稱和標識符。
| 區域性名稱 | 區域性標識符 | 語言-國家/地區 |
|---|---|---|
| ""(空字符串) | 0x007F | 固定區域性 |
| af | 0x0036 | 南非荷蘭語 |
| af-ZA | 0x0436 | 南非荷蘭語 - 南非 |
| sq | 0x001C | 阿爾巴尼亞語 |
| sq-AL | 0x041C | 阿爾巴尼亞語 - 阿爾巴尼亞 |
| ar | 0x0001 | 阿拉伯語 |
| ar-DZ | 0x1401 | 阿拉伯語 - 阿爾及利亞 |
| ar-BH | 0x3C01 | 阿拉伯語 - 巴林 |
| ar-EG | 0x0C01 | 阿拉伯語 - 埃及 |
| ar-IQ | 0x0801 | 阿拉伯語 - 伊拉克 |
| ar-JO | 0x2C01 | 阿拉伯語 - 約旦 |
| ar-KW | 0x3401 | 阿拉伯語 - 科威特 |
| ar-LB | 0x3001 | 阿拉伯語 - 黎巴嫩 |
| ar-LY | 0x1001 | 阿拉伯語 - 利比亞 |
| ar-MA | 0x1801 | 阿拉伯語 - 摩洛哥 |
| ar-OM | 0x2001 | 阿拉伯語 - 阿曼 |
| ar-QA | 0x4001 | 阿拉伯語 - 卡塔爾 |
| ar-SA | 0x0401 | 阿拉伯語 - 沙特阿拉伯 |
| ar-SY | 0x2801 | 阿拉伯語 - 敘利亞 |
| ar-TN | 0x1C01 | 阿拉伯語 - 突尼斯 |
| ar-AE | 0x3801 | 阿拉伯語 - 阿拉伯聯合酋長國 |
| ar-YE | 0x2401 | 阿拉伯語 - 也門 |
| hy | 0x002B | 亞美尼亞語 |
| hy-AM | 0x042B | 亞美尼亞語 - 亞美尼亞 |
| az | 0x002C | 阿澤里語 |
| az-AZ-Cyrl | 0x082C | 阿澤里語(西里爾語)- 阿塞拜疆 |
| az-AZ-Latn | 0x042C | 阿澤里語(拉?。? 阿塞拜疆 |
| eu | 0x002D | 巴斯克語 |
| eu-ES | 0x042D | 巴斯克語 - 巴斯克地區 |
| be | 0x0023 | 白俄羅斯語 |
| be-BY | 0x0423 | 白俄羅斯語 - 白俄羅斯 |
| bg | 0x0002 | 保加利亞語 |
| bg-BG | 0x0402 | 保加利亞語 - 保加利亞 |
| ca | 0x0003 | 加泰羅尼亞語 |
| ca-ES | 0x0403 | 加泰羅尼亞語 - 加泰羅尼亞地區 |
| zh-HK | 0x0C04 | 中文 - 香港特別行政區 |
| zh-MO | 0x1404 | 中文 - 澳門特別行政區 |
| zh-CN | 0x0804 | 中文 - 中國 |
| zh-CHS | 0x0004 | 中文(簡體) |
| zh-SG | 0x1004 | 中文 - 新加坡 |
| zh-TW | 0x0404 | 中文 - 臺灣 |
| zh-CHT | 0x7C04 | 中文(繁體) |
| hr | 0x001A | 克羅地亞語 |
| hr-HR | 0x041A | 克羅地亞語 - 克羅地亞 |
| cs | 0x0005 | 捷克語 |
| cs-CZ | 0x0405 | 捷克語 - 捷克共和國 |
| da | 0x0006 | 丹麥語 |
| da-DK | 0x0406 | 丹麥語 - 丹麥 |
| div | 0x0065 | 馬爾代夫語 |
| div-MV | 0x0465 | 馬爾代夫語 - 馬爾代夫 |
| nl | 0x0013 | 荷蘭語 |
| nl-BE | 0x0813 | 荷蘭語 - 比利時 |
| nl-NL | 0x0413 | 荷蘭語 - 荷蘭 |
| en | 0x0009 | 英語 |
| en-AU | 0x0C09 | 英語 - 澳大利亞 |
| en-BZ | 0x2809 | 英語 - 伯利茲 |
| en-CA | 0x1009 | 英語 - 加拿大 |
| en-CB | 0x2409 | 英語 - 加勒比 |
| en-IE | 0x1809 | 英語 - 愛爾蘭 |
| en-JM | 0x2009 | 英語 - 牙買加 |
| en-NZ | 0x1409 | 英語 - 新西蘭 |
| en-PH | 0x3409 | 英語 - 菲律賓 |
| en-ZA | 0x1C09 | 英語 - 南非 |
| en-TT | 0x2C09 | 英語 - 特立尼達和多巴哥 |
| en-GB | 0x0809 | 英語 - 英國 |
| en-US | 0x0409 | 英語 - 美國 |
| en-ZW | 0x3009 | 英語 - 津巴布韋 |
| et | 0x0025 | 愛沙尼亞語 |
| et-EE | 0x0425 | 愛沙尼亞語 - 愛沙尼亞 |
| fo | 0x0038 | 法羅語 |
| fo-FO | 0x0438 | 法羅語 - 法羅群島 |
| fa | 0x0029 | 波斯語 |
| fa-IR | 0x0429 | 波斯語 - 伊朗 |
| fi | 0x000B | 芬蘭語 |
| fi-FI | 0x040B | 芬蘭語 - 芬蘭 |
| fr | 0x000C | 法語 |
| fr-BE | 0x080C | 法語 - 比利時 |
| fr-CA | 0x0C0C | 法語 - 加拿大 |
| fr-FR | 0x040C | 法語 - 法國 |
| fr-LU | 0x140C | 法語 - 盧森堡 |
| fr-MC | 0x180C | 法語 - 摩納哥 |
| fr-CH | 0x100C | 法語 - 瑞士 |
| gl | 0x0056 | 加利西亞語 |
| gl-ES | 0x0456 | 加利西亞語 - 加利西亞地區 |
| ka | 0x0037 | 格魯吉亞語 |
| ka-GE | 0x0437 | 格魯吉亞語 - 格魯吉亞 |
| de | 0x0007 | 德語 |
| de-AT | 0x0C07 | 德語 - 奧地利 |
| de-DE | 0x0407 | 德語 - 德國 |
| de-LI | 0x1407 | 德語 - 列支敦士登 |
| de-LU | 0x1007 | 德語 - 盧森堡 |
| de-CH | 0x0807 | 德語 - 瑞士 |
| el | 0x0008 | 希臘語 |
| el-GR | 0x0408 | 希臘語 - 希臘 |
| gu | 0x0047 | 古吉拉特語 |
| gu-IN | 0x0447 | 古吉拉特語 - 印度 |
| he | 0x000D | 希伯來語 |
| he-IL | 0x040D | 希伯來語 - 以色列 |
| hi | 0x0039 | 印地語 |
| hi-IN | 0x0439 | 印地語 - 印度 |
| hu | 0x000E | 匈牙利語 |
| hu-HU | 0x040E | 匈牙利語 - 匈牙利 |
| is | 0x000F | 冰島語 |
| is-IS | 0x040F | 冰島語 - 冰島 |
| id | 0x0021 | 印度尼西亞語 |
| id-ID | 0x0421 | 印度尼西亞語 - 印度尼西亞 |
| it | 0x0010 | 意大利語 |
| it-IT | 0x0410 | 意大利語 - 意大利 |
| it-CH | 0x0810 | 意大利語 - 瑞士 |
| ja | 0x0011 | 日語 |
| ja-JP | 0x0411 | 日語 - 日本 |
| kn | 0x004B | 卡納達語 |
| kn-IN | 0x044B | 卡納達語 - 印度 |
| kk | 0x003F | 哈薩克語 |
| kk-KZ | 0x043F | 哈薩克語 - 哈薩克斯坦 |
| kok | 0x0057 | 貢根語 |
| kok-IN | 0x0457 | 貢根語 - 印度 |
| ko | 0x0012 | 朝鮮語 |
| ko-KR | 0x0412 | 朝鮮語 - 韓國 |
| ky | 0x0040 | 吉爾吉斯語 |
| ky-KG | 0x0440 | 吉爾吉斯語 - 吉爾吉斯坦 |
| lv | 0x0026 | 拉脫維亞語 |
| lv-LV | 0x0426 | 拉脫維亞語 - 拉脫維亞 |
| lt | 0x0027 | 立陶宛語 |
| lt-LT | 0x0427 | 立陶宛語 - 立陶宛 |
| mk | 0x002F | 馬其頓語 |
| mk-MK | 0x042F | 馬其頓語 - 前南斯拉夫聯盟馬其頓共和國 |
| ms | 0x003E | 馬來語 |
| ms-BN | 0x083E | 馬來語 - 文萊 |
| ms-MY | 0x043E | 馬來語 - 馬來西亞 |
| mr | 0x004E | 馬拉地語 |
| mr-IN | 0x044E | 馬拉地語 - 印度 |
| mn | 0x0050 | 蒙古語 |
| mn-MN | 0x0450 | 蒙古語 - 蒙古 |
| no | 0x0014 | 挪威語 |
| nb-NO | 0x0414 | 挪威語(伯克梅爾)- 挪威 |
| nn-NO | 0x0814 | 挪威語(尼諾斯克)- 挪威 |
| pl | 0x0015 | 波蘭語 |
| pl-PL | 0x0415 | 波蘭語 - 波蘭 |
| pt | 0x0016 | 葡萄牙語 |
| pt-BR | 0x0416 | 葡萄牙語 - 巴西 |
| pt-PT | 0x0816 | 葡萄牙語 - 葡萄牙 |
| pa | 0x0046 | 旁遮普語 |
| pa-IN | 0x0446 | 旁遮普語 - 印度 |
| ro | 0x0018 | 羅馬尼亞語 |
| ro-RO | 0x0418 | 羅馬尼亞語 - 羅馬尼亞 |
| ru | 0x0019 | 俄語 |
| ru-RU | 0x0419 | 俄語 - 俄羅斯 |
| sa | 0x004F | 梵語 |
| sa-IN | 0x044F | 梵語 - 印度 |
| sr-SP-Cyrl | 0x0C1A | 塞爾維亞語(西里爾語)- 塞爾維亞 |
| sr-SP-Latn | 0x081A | 塞爾維亞語(拉?。? 塞爾維亞 |
| sk | 0x001B | 斯洛伐克語 |
| sk-SK | 0x041B | 斯洛伐克語 - 斯洛伐克 |
| sl | 0x0024 | 斯洛文尼亞語 |
| sl-SI | 0x0424 | 斯洛文尼亞語 - 斯洛文尼亞 |
| es | 0x000A | 西班牙語 |
| es-AR | 0x2C0A | 西班牙語 - 阿根廷 |
| es-BO | 0x400A | 西班牙語 - 玻利維亞 |
| es-CL | 0x340A | 西班牙語 - 智利 |
| es-CO | 0x240A | 西班牙語 - 哥倫比亞 |
| es-CR | 0x140A | 西班牙語 - 哥斯達黎加 |
| es-DO | 0x1C0A | 西班牙語 - 多米尼加共和國 |
| es-EC | 0x300A | 西班牙語 - 厄瓜多爾 |
| es-SV | 0x440A | 西班牙語 - 薩爾瓦多 |
| es-GT | 0x100A | 西班牙語 - 危地馬拉 |
| es-HN | 0x480A | 西班牙語 - 洪都拉斯 |
| es-MX | 0x080A | 西班牙語 - 墨西哥 |
| es-NI | 0x4C0A | 西班牙語 - 尼加拉瓜 |
| es-PA | 0x180A | 西班牙語 - 巴拿馬 |
| es-PY | 0x3C0A | 西班牙語 - 巴拉圭 |
| es-PE | 0x280A | 西班牙 - 秘魯 |
| es-PR | 0x500A | 西班牙語 - 波多黎各 |
| es-ES | 0x0C0A | 西班牙語 - 西班牙 |
| es-UY | 0x380A | 西班牙語 - 烏拉圭 |
| es-VE | 0x200A | 西班牙語 - 委內瑞拉 |
| sw | 0x0041 | 斯瓦希里語 |
| sw-KE | 0x0441 | 斯瓦希里語 - 肯尼亞 |
| sv | 0x001D | 瑞典語 |
| sv-FI | 0x081D | 瑞典語 - 芬蘭 |
| sv-SE | 0x041D | 瑞典語 - 瑞典 |
| syr | 0x005A | 敘利亞語 |
| syr-SY | 0x045A | 敘利亞語 - 敘利亞 |
| ta | 0x0049 | 泰米爾語 |
| ta-IN | 0x0449 | 泰米爾語 - 印度 |
| tt | 0x0044 | 韃靼語 |
| tt-RU | 0x0444 | 韃靼語 - 俄羅斯 |
| te | 0x004A | 泰盧固語 |
| te-IN | 0x044A | 泰盧固語 - 印度 |
| th | 0x001E | 泰語 |
| th-TH | 0x041E | 泰語 - 泰國 |
| tr | 0x001F | 土耳其語 |
| tr-TR | 0x041F | 土耳其語 - 土耳其 |
| uk | 0x0022 | 烏克蘭語 |
| uk-UA | 0x0422 | 烏克蘭語 - 烏克蘭 |
| ur | 0x0020 | 烏爾都語 |
| ur-PK | 0x0420 | 烏爾都語 - 巴基斯坦 |
| uz | 0x0043 | 烏茲別克語 |
| uz-UZ-Cyrl | 0x0843 | 烏茲別克語(西里爾語)- 烏茲別克斯坦 |
| uz-UZ-Latn | 0x0443 | 烏茲別克語(拉?。? 烏茲別克斯坦 |
| vi | 0x002A | 越南語 |
| vi-VN | 0x042A | 越南語 - 越南 |




















