我想大家對DateTime.ToString()方法的用法肯定已經非常熟悉了,但我想大家用過的大部分用法都是:DateTime.ToString(“format”),不過本文想講述的是它的另一個重載方法DateTime.ToString("format",IFormatProvider)。
如果大家做的項目中有多語言的需求的話,那麼肯定少不了會有的功能要顯示一個時間,由於文差異域每種語言用戶對時間格式的需求肯定是不一樣的,比如英文中的時間格式是:12/2/2013 8:20:22 PM,而德語的格式是:02.12.2013 20:20:22;這個區別還是很大的,而且如果語言種數多的話,也很難對每種特定語言的時間格式作特定的處理,而且也不利於程序的擴展性。不過萬幸的是微軟給我們提供了CultureInfo這個類,同時這個類繼承了IFormatProvider這個接口,所以我們可以利用它來得到我們想要的時間格式(其它格式也可以通過它來獲取,比哪貨幣等)。
閒話不多說,直接看代碼:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24Thread.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
越南語 - 越南