首页 > 编程 > C# > 正文

C# DateTime.ToString根据不同语言生成相应的时间格式

2020-01-24 01:13:29
字体:
来源:转载
供稿:网友

我想大家对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

越南语 - 越南

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表