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这个接口,所以我们可以利用它来得到我们想要的时间格式(其它格式也可以通过它来获取,比哪货币等)。

  闲话不多说,直接看代码:

View Code
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-de");
            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);

  更多关于时间格式参数请参考:http://msdn.microsoft.com/zh-cn/library/az4se3k1(v=vs.80).aspx

posted @ 2013-01-08 14:01  The Catcher  阅读(1479)  评论(0编辑  收藏  举报