C# DateTime.ToString根据不同语言生成相应的时间格式
作者:jerrylsxu 发布时间:2022-04-16 12:34:51
我想大家对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 | 越南语 - 越南 |
猜你喜欢
- System.getProperty(user.dir)定位问题前言随着学习java web 的深入学习,为了巩固自己的学习成果,练习了一个
- 本教程将介绍如何在 Spring Boot 应用程序中使用 Kafka。Kafka 是一个分布式的发布-订阅消息系统,它可以处理大量数据并提
- 一直想在持续集成方向学习并研究一番,近期正准备结合jmeter+ant+jenkins做自动化接口测试,在学习的同时,正好实践一番,毕竟实践
- yaml介绍YAML(YAML Ain't Markup Language),一种数据序列化格式优点:容易阅读容易与脚本语言交互以数
- Spring介绍:spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring的用途不仅限于服务
- Java Resource路径首先一点很重要,Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝
- 一、历史版本delegate void StudentDelegate(string name, int age);public class
- 本文实例为大家分享了Java NIO实现多人聊天室的具体代码,供大家参考,具体内容如下1. 服务器端代码ChatServer类:packag
- 本文实例讲述了Java date format时间格式化操作。分享给大家供大家参考,具体如下:import java.util.Date;i
- 本文实例为大家分享了opencv检测直线之投影法的具体代码,供大家参考,具体内容如下以下是我对投影法的一点认识和实验:投影法就是数字图像在某
- [程序中使用的数据结构和符号说明]HitBrick类GreenBallThread控制小球路线xUp,yUp,bouncing定义变量存储1
- 包含默认敏感词过滤和自定义敏感词过滤。导入依赖<dependency> <groupId>com.git
- Android实现读取NFC卡卡号示例,具体如下:1.权限 <uses-permission android:name=&
- 这篇文章主要介绍了Java多态中动态绑定原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 目录Maven依赖配置示例Maven依赖要开始使用咖啡因Caffeine和Spring Boot,我们首先添加spring-boot-sta
- menu部分xml代码<?xml version="1.0" encoding="utf-8"
- 说起观察者模式,估计在园子里能搜出一堆来。所以写这篇博客的目的有两点:1.观察者模式是写松耦合代码的必备模式,重要性不言而喻,抛开代码层面,
- java操作json对象出现StackOverflow错误今天在做项目的时候,遇到一个非常怪异的问题。一个java实体类中存在多个属性,每一
- Maven多模块编译慢最近在部署项目时发现,Maven编译打包相当耗时,比之前项目用Gradle慢了很多倍,特别是对于WEB工程,打war包
- 如何在listview中插入图片,相信大家很想知道,下面就为大家分享具体步骤:第一步:在窗体中拖入ListView控件和imageList控