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

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


越南语 - 越南

(0)

相关推荐

  • C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换

    定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串转比特数组 复制代码 代码如下: (1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串"); (2)byte[] bt=Convert.FromBase64String("字符串"); 2.字符串转流 复制代码 代码如下: (1)MemoryStream ms=new MemoryStream(System.Text.Encoding.

  • C#中IEnumerable接口用法实例分析

    本文实例讲述了C#中IEnumerable接口用法.分享给大家供大家参考.具体分析如下: 枚举数可用于读取集合中的数据,但不能用于修改基础集合. 最初,枚举数定位在集合中第一个元素前.Reset 方法还会将枚举数返回到此位置.在此位置上,Current 属性未定义.因此,在读取 Current 的值之前,必须调用 MoveNext 方法将枚举数提前到集合的第一个元素. 在调用 MoveNext 或 Reset 之前,Current 返回同一对象.MoveNext 将 Current 设置为下一个

  • C#中enum和string的相互转换

    C# Json转换操作 枚举类型 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型,如果没有显式声明基础类型,则使用Int32. 注意:枚举类型的基类型是除 Char 外的任何整型,所以枚举类型的值是整型值 1.C#将枚举转为字符串(enume->string) 我们的对象中包含枚举类型,在序列化成Json字符串的时候,显示的是枚举类型对应的数字.因为这是枚举的 本质所在,但是很多时候需要在JSON转化的时候做一些操作,使之显示字符串,因为用户需要字符串. 方法就是:在枚举类型

  • C#中的IEnumerable接口深入研究

    C#和VB.NET中的LINQ提供了一种与SQL查询类似的"对象查询"语言,对于熟悉SQL语言的人来说除了可以提供类似关联.分组查询的功能外,还能获取编译时检查和Intellisense的支持,使用Entity Framework更是能够自动为对象实体的查询生成SQL语句,所以很受大中型信息系统设计者的青睐. IEnumerable这个接口可以说是为了这个特性"量身定制",再加上微软提供的扩展(Extension)方法和Lambda表达式,给开发者带来了无穷的便利.

  • C#中Byte[]和String之间转换的方法

    本文给大家介绍如何在Byte[]和String之间进行转换? 比特(b):比特只有0 1,1代表有脉冲,0代表无脉冲.它是计算机物理内存保存的最基本单元. 字节(B):8个比特,0-255的整数表示 编码:字符必须编码后才能被计算机处理.早期计算机使用7为AscII编码,为了处理汉字设计了中文简体GB2312和big5 字符串与字节数组之间的转换,事实上是现实世界的信息和数字世界信息之间的转换,势必涉及到某种编码方式,不同的编码方式将导致不同的转换结果.C#中常使用System.Text.Enc

  • C#中的IEnumerable简介及简单实现实例

    IEnumerable这个接口在MSDN上是这么说的,它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历字符串的通用方法. 下面先贴出code. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; us

  • C#判断一个String是否为数字类型

    方案一:Try...Catch(执行效率不高) 复制代码 代码如下: private bool IsNumberic(string oText) {     try     {         int var1=Convert.ToInt32 (oText);         return true;     }     catch     {         return false;     } } 方案二:正则表达式(推荐) a) 复制代码 代码如下: public static bool

  • C#中IEnumerable、ICollection、IList、List之间的区别

    首先我看看 IEnumerable: // 摘要: // 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代. // // 类型参数: // T: // 要枚举的对象的类型. [TypeDependency("System.SZArrayHelper")] public interface IEnumerable<out T> : IEnumerable { // 摘要: // 返回一个循环访问集合的枚举器. // // 返回结果: // 可用于循环访问集合的 Syst

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

    我想大家对DateTime.ToString()方法的用法肯定已经非常熟悉了,但我想大家用过的大部分用法都是:DateTime.ToString("format"),不过本文想讲述的是它的另一个重载方法DateTime.ToString("format",IFormatProvider). 如果大家做的项目中有多语言的需求的话,那么肯定少不了会有的功能要显示一个时间,由于文差异域每种语言用户对时间格式的需求肯定是不一样的,比如英文中的时间格式是:12/2/2013

  • python datetime时间格式的相互转换问题

    具体代码如下所示: # 时间的替换 import time,datetime today = datetime.datetime.today() print('当前时间:',today) print('当前时间转换成整h整m整s:',today.replace(minute=0, second=0)) # 时间的加减 res1 = today + datetime.timedelta(days=1,minutes=60) print('增加的时间为res:',res1) res0 = datet

  • python常用时间库time、datetime与时间格式之间的转换教程

    目录 一,python中储存时间的三种格式 1,时间元组(结构体时间) 2,时间戳 3,格式化时间 二.time库 1,time.time() 2,time.localtime([ sec ]) 3,time gmtime([ sec ]) 4,time.strftime(format[, t]) 5,time.strptime(string[, format]) 6,time mktime(t) 7,time.sleep(nums) 8,timeit.Timer.timeit([number]

  • 使用DateTime的ParseExact方法实现特殊日期时间的方法详解

    今天遇到一个特别的需求,需要从下面的字符串中转换成一个DateTime对象: 复制代码 代码如下: [07-13 15:50:42] 主要问题是这个时间不是标准的时间,而是自定义的格式,即开头是月-日,然后是时间.使用最常用的DateTime.Parse(string dateTimeStr)无法转换,问题就在于这个自定义格式上.搜索了之后,我找到了下面的方法: 复制代码 代码如下: public static DateTime ParseExact( string s, string form

  • python的time模块和datetime模块实例解析

    这篇文章主要介绍了python的time模块和datetime模块实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 将当前时间转成字符串 strftime 方法,并输出 import datetime # 获取当前时间 datetime.datetime.now() print(datetime.datetime.now()) # 输出时间格式数据:2019-11-28 20:39:25.485711 now_time=str(da

  • Jil,高效的json序列化和反序列化库

    谷歌的potobuf不说了,它很牛B,但是对客户端对象不支持,比如JavaScript就读取不了. Jil很牛,比Newtonsoft.Json要快很多,且支持客户端,此处只贴代码: using Jil; using System.Runtime.Serialization; [Serializable] class Employee { //[JilDirective(Name = "cid")] public int Id { get; set; } [IgnoreDataMemb

  • js时间戳和c#时间戳互转方法(推荐)

    实例如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Newtonsoft.Json; namespace TestWeb { public partial class ajax : System.Web.UI.Page { protected voi

  • 65xx系列交换机配置Native IOS

    65xx系列交换机配置(Native IOS) 1. 6509介绍  Cisco Catalyst 6500系列交换机提供3插槽.6插槽.9插槽和13插槽的机箱,以及多种集成式服务模块,包括数千兆位网络安全性.内容交换.语音和网络分析模块. Catalyst 6500系列中的所有型号都使用了统一的模块和操作系统软件,形成了能够适应未来发展的体系结构,由于能提供操作一致性,因而能提高IT基础设施的利用率,并增加投资回报.从48端口到576端口的10/100/1000以太网布线室到能够支持192个1

  • Python如何进行时间处理

    我们会经常遇到对时间的处理,用python来进行时间处理简直不要太方便了,这一期就给大家介绍一下python的时间处理! 用python进行时间处理主要会用到time,calendar,datetime及pandas这几个库,其中又以后两个最为常用. 这一期我们主要介绍一下用datetime库进行时间处理的常用操作. 1. datetime基础 1.1 获取当前时间 import time import datetime as dtm ## 用datetime获取当前时间 dtime = dtm

  • python中pathlib模块的基本用法与总结

    前言 相比常用的 os.path而言,pathlib 对于目录路径的操作更简介也更贴近 Pythonic.但是它不单纯是为了简化操作,还有更大的用途. pathlib 是Python内置库,Python 文档给它的定义是:The pathlib module – object-oriented filesystem paths(面向对象的文件系统路径).pathlib 提供表示文件系统路径的类,其语义适用于不同的操作系统. 更多详细的内容可以参考官方文档:https://docs.python.

随机推荐