我想大家对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 标准,格式为“
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越南语 - 越南您可能感兴趣的文章:C# string格式的日期时间字符串转为DateTime类型的方法深入理解C# DateTime日期格式化C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法C#中DateTime日期类型格式化显示方法汇总c# datetime 格式化大全C#时间格式化(Datetime)用法详解C#中DateTime的格式符的实现示例
