• c#转日期时间型


    在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结。一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string value)方法进行转换。


    首先介绍最常用的Convert.ToDateTime方法,然后在说明其他的方法。下面这段代码是最常见的转换代码:

    1
    2
    3
    4
    5
    6
    //将含有正确日期格式的string类型转换成DateTime类型
     string strDate = "2014-08-01";
     DateTime dt1 = Convert.ToDateTime(strDate);
     //将包含时分秒的string类型日期转换成DateTime类型
     string strDateTime = "2014-08-01 10:57:31";
     DateTime dt2 = Convert.ToDateTime(strDateTime);

      

    C#的类型转换还是十分方便的,这里要注意的是,传入的string类型的日期格式必须要正确,否则会跳出异常错误信息:该字符串未被识别为有效的 DateTime。正确的日期格式为 yyyy-MM-dd HH:mm:ss (2014-08-01 11:25:20)或者 yyyy/MM/dd HH:mm:ss (2014-08-01 11:25:20),还有其他格式这里就不列举了,网上搜索下C#日期格式就有了,这里提供下微软的MSDN官方文档

    这里是转换方法的文档说明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 摘要:
    //     将日期和时间的指定字符串表示形式转换为等效的日期和时间值。
    //
    // 参数:
    //   value:
    //     日期和时间的字符串表示形式。
    //
    // 返回结果:
    //     value 的值的日期和时间等效项,如果 value 为 null
    // ,则为 System.DateTime.MinValue 的日期和时间等效项。
    //
    // 异常:
    //   System.FormatException:
    //     value 不是格式正确的日期和时间字符串。
    public static DateTime ToDateTime(string value);

      这里在介绍下其他的转换方法,我们还可以使用DateTime.Parse,DateTime.TryParse,DateTime.ParseExact和DateTime.TryParseExact这四个方法进行转换。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /*声明要转换的日期格式字符串*/
    string strDateTime = "2014-08-01 13:52:05";
     
    /*使用DateTime.Parse方法进行转换*/
    DateTime dt1 = DateTime.Parse(strDateTime);
     
    /*
     * 使用TryParse方法进行转换            
     * 如果日期格式不正确则返回空值
     * 转换后的值自动赋值给传入的out形参dt2中
     */
    DateTime dt2;
    DateTime.TryParse(strDateTime, out dt2);
     
    /*
     * 使用ParseExact方法进行转换
     * 这里需要带入要转换的日期格式参数
     * 这里的日期格式可以自定义,比如yyyyMMddHHmmss,就可以传入20140801135205进行转换
     * 第三个参数是区域性特定格式信息,这里使用当前系统默认区域(即中国)            
     */
    DateTime dt3=DateTime.ParseExact(strDateTime,"yyyy-MM-dd HH:mm:ss",System.Globalization.CultureInfo.CurrentCulture);
     
    /*
     * 使用TryParseExact方法进行转换
     * 基本用法和大致参数ParseExact方法一样
     * 只是传入返回值的DateTime类型的out形参,这里是dt4
     * 第四个参数为:格式设置选项,既DateTimeStyles枚举,设置NONE即可
     */
    DateTime dt4;
    DateTime.TryParseExact(strDateTime, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dt4);

      这里要注意的是,如果是用Parse方法也是需要注意传入正确的日期格式,否则会有错误异常。但是如果使用TryParse方法则不用担心,错误的格式只会返回null空的DateTime类型回来。ParseExact和TryParseExact则是根据你传入的日期格式进行转换,这里可转换任意的日期格式,具体转换其他格式的日期字符串的内容。

    最近项目中遇到以前一直困扰的问题,就是如何将string转换成DateTime?这种可空日期类型。以前总是通过编写一堆逻辑代码来进行转换,但是写这些代码感觉非常繁琐。后在网上浏览相关资料,使用NullableConverter类就可以轻松的进行转换。

    以下是测试的部分代码,代码在控制台应用程序中运行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /* 测试string类型转换成DateTime?类型*/
    /*NullableConverter类构造函数必须传入要转换的类型*/
     
    System.ComponentModel.NullableConverter nullableDateTime = new System.ComponentModel.NullableConverter(typeof(DateTime?));
     
    /*
    *正常日期格式字符串转换为DateTime?
    */
    string strDate = DateTime.Now.ToString();
    DateTime? dt1=(DateTime?)nullableDateTime.ConvertFromString(strDate);
    Console.WriteLine("正常日期格式字符串转换成DateTime?:{0}", dt1);
     
    /*
    *字符串为空白转换为DateTime?
    */
    strDate = string.Empty;
    DateTime? dt2 = (DateTime?)nullableDateTime.ConvertFromString(strDate);
    Console.WriteLine("空白字符串转换成DateTime?:{0}", dt2);
     
    /*
    *字符串为NULL转换为DateTime?
    */
    strDate = null;
    DateTime? dt3 = (DateTime?)nullableDateTime.ConvertFromString(strDate);
    Console.WriteLine("NULL字符串转换成DateTime?:{0}", dt3);
    Console.Read();

      

    输出的结果是:字符串转换可控日期类型结果图

    总结果上看可以顺利将空字符串和正常的字符串转换成DateTime?类型,但是如果传入非法的日期格式的字符串会报错,需要另外处理。

    NullableConverter类主要提供可空类型与其基础基元类型间的自动转换。关于NullableConverter类的具体说明,可在网络上找到大量的资料,这里就不再叙述。这里是MSDN的描述:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.nullableconverter(v=vs.85).aspx

  • 相关阅读:
    Distribution(F题)---第八届河南省程序设计大赛
    河南省省赛总结
    Wireless Network--poj2236(并查集)
    River Crossing---河南省第六届大学生程序设计竞赛
    Monkey and Banana---hdu1069(dp)
    Bone Collector--hdu2602(01背包)
    节能--河南省第六届大学生程序设计竞赛
    最舒适的路线--河南省第六届大学生程序设计竞赛
    MPEG2简单码流分析
    H.264简单码流分析
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/12202277.html
Copyright © 2020-2023  润新知