C# DateTime.ToString根据不同语言生成相应的时间格式
作者:jerrylsxu
我想大家对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 |
越南语 - 越南 |