zoukankan      html  css  js  c++  java
  • 随心所欲的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:日
    • h或H:小时
    • 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页面的列表中查找对应字符。

    2.字符串转日期(原创)

    a.方法一:Convert.ToDateTime(string)

    Convert.ToDateTime("10-03-20");   //2010-3-20 0:00:00  

    b.方法二:DateTime.Parse(string)

    DateTime.Parse("10-03-20");   //2010-3-20 0:00:00   

    c.方法三:DateTime.ParseExact(string,string日期格式,null) 这个函数可以自定义日期转换格式

    DateTime.ParseExact("2010年03月20日 15点14分56秒", "yyyy年MM月dd日 HH点mm分ss秒", null);  //2010-3-20 15:14:56 

    DateTime.ParseExact(""2010-03-20"", "yyyy-MM-dd", null);  //2010-3-20 0:00:00 

     
    DateTime   dt   =   DateTime.ParseExact("20060709110901","yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
     
     

    最近需要把“20121010”转换为“2012-10-10”格式,直接用Convert.ToDateTime("20121010"),系统报错“未被识别的DateTime类型”。

    解决方法:

    一、DateTime.ParseExact

    string str = "20121010"


     IFormatProvider ifp = new CultureInfo("zh-CN"true); 

    DateTime dt = DateTime.ParseExact(str, "yyyyMMdd", ifp); 

    MessageBox.Show(dt.ToString("yyyy-MM-dd")); 

    二、DateTime.TryParseExact

    string str = "20121010";

    DateTime dt; 


    IFormatProvider ifp = new CultureInfo("zh-CN"true);


    if (DateTime.TryParseExact(str, "yyyyMMdd", ifp, DateTimeStyles.None, out dt)) 

    {
          MessageBox.Show(dt.ToString(("yyyy-MM-dd"));

    }

  • 相关阅读:
    ThreadLocal的分享
    remot debug
    小计-git
    入坑HttpServletRequest.getParameterMap
    基于线程池和连接池的Http请求
    spring,maven,dubbo配置
    springMVC,mybatis配置事务
    寻找数组的主元素问题的解法
    关于最大子序列和问题以及相关衍生问题的分析
    关于选择问题的一些思路.
  • 原文地址:https://www.cnblogs.com/Alex80/p/5437126.html
Copyright © 2011-2022 走看看