随心所欲的DateTime显示格式


任何项目,难免会碰到DateTime的显示问题,.net框架虽提供丰富多样的显示方法,但我很少使用,因老忘记细节,每次都要纠结到底月份在前还是年份在前;日期分隔符到底是“/”,还是“\”,还是“-”等等。

image

因此,每逢日期显示,我的写法通常类似下面代码所示,这样能根据需求取舍,随心所欲的控制显示格式、顺序,也不用纠结分隔符到底是什么了,且ToString方法中,每个字符表示对应单词的首字母,并不难记。

DateTime dt= new DateTime(2012,12,6,13,19,0);
dt.ToString( "yyyy-MM-dd hh:mm:ss tt zz"); // 2012-12-06 01:19:00 PM +08
  • y : 年
  • M : 月
  • d:日
  • hH:小时
  • m:分钟
  • s:秒
  • t:12小时制的上下午(AM/PM)
  • z:时区

这些字符大小写敏感,“h”和“H”分别对应12和24小时制时间。由于月-Month和分钟-Minute首字母都是“M”,所以用大小写来区分,大写表月份,小写表分钟。

日和月的多样化显示

有时月份的显示会多种多样,有放开头全英文显示的,有只显示前三个字母的,有放中间用逗号隔开的。而碰到这种情况,我见过有些代码用switch-case依次判断月份来实现,略显麻烦,实际上,上文中的方法稍加改变就可完成。

比如月份,ToString方法中“M”的数量决定显示格式。

dt.ToString( "MM");    // 12
dt.ToString( "MMM");   // Dec
dt.ToString( "MMMM"); // December

同理,代表日的“d”也有同样的特性,不同点是“ddd”和“dddd”表星期而不是几号。

dt.ToString( "dd");    // 06
dt.ToString( "ddd");   // Thu
dt.ToString( "dddd"); // Thursday

不同区域文化的日期

时间显示难免会碰到区域文化的问题,比如运行最开始的例子,“PM”可能会显示为“下午”:

dt.ToString( "yyyy-MM-dd hh:mm:ss tt zz"); // 2012-12-06 01:19:00 下午 +08

用文字显示月份时,可能会直接显示“十二月”:

dt.ToString( "MM");    // 12
dt.ToString( "MMM");   // 十二月
dt.ToString( "MMMM"); // 十二月

区域文化显示不同往往会造成问题,为避免麻烦,就要指定具体的区域文化。一般来说,英文较常用的,指定方式也最简单,使用CultureInfo类的静态属性InvariantCulture即可:

dt.ToString( "yyyy-MM-dd hh:mm:ss tt zz", CultureInfo.InvariantCulture); // 2012-12-06 01:19:00 PM +08

当需要使用其他的区域文化时,就要实例化指定的CultureInfo类,比如下例中分别显示中文、日文、英文的星期:

dt.ToString( "dddd");                                 // 星期四
dt.ToString( "dddd", new CultureInfo( "ja-JP"));       // 木曜日
dt.ToString( "dddd", CultureInfo.InvariantCulture);   // Thursday

这里用“ja-Jp”表示日文,也可用“ja”。中文显示时,可以指定“zh-TW”来显示繁体字。如果想显示其他区域文化的文字,可以到这个MSDN页面的列表中查找对应字符。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM