zoukankan      html  css  js  c++  java
  • C# 日期和时间的字符串表示形式转换为其等效的DateTime(stringToDateTime)

    一. 标准的日期和时间字符串转换

    将日期和时间的字符串表示形式转换为其等效的DateTime对象是开发中很常见的类型转换,我们最常使用的方式是:

    // 如果s为null,抛出ArgumentNullException异常
    // 如果s 不包含的有效字符串表示形式的日期和时间,抛出FormatException
    DateTime DateTime.Parse(string s);
    
    bool DateTime.TryParse(string s, out DateTime result);

    DateTime.Parse在处理过程中,可能会抛出异常让编写代码更加复杂,所以我们更推荐的是DateTime.TryParse方法。

    为了避免重复编码和减少开发时编写的代码量,我们将转换的代码封装到我们自己的公共帮助库中:

            /// <summary>
            /// 转换为日期
            /// </summary>
            /// <param name="data">数据</param>
            public static DateTime ToDate(object data)
            {
                if (data == null)
                    return DateTime.MinValue;
                DateTime result;
                return DateTime.TryParse(data.ToString(), out result) ? result : DateTime.MinValue;
            }
    
            /// <summary>
            /// 转换为可空日期
            /// </summary>
            /// <param name="data">数据</param>
            public static DateTime? ToDateOrNull(object data)
            {
                if (data == null)
                    return null;
                DateTime result;
                if (DateTime.TryParse(data.ToString(), out result))
                    return result;
                return null;
            }

    为了更加方便,我们还可以对string类型做方法扩展(Extension Method),这里不再演示。

    二. 自定义格式的日期和时间字符串转换

    有些时候会遇到一些特别的需求,需要将自定义格式的日期和时间字符串转换为DateTime对象,这时候用上面的方法就会无法进行转换了。

    // 需要转换的字符串,即开头是 月-日,然后是时间
    string s = "07-13 15:50:42"

    这时我们可以用下面的方法:

    // 如果dateTimeStr或者format 是null,会抛出ArgumentNullException异常
    // 如果dateTimeStr或者format 是空字符串,则抛出FormatException异常
    DateTime DateTime.ParseExact(string s, string format, IFormatProvider provider);
    bool DateTime.ParseExact(string s, string format, IFormatProvider provider, DateTimeStyles style, out DateTime result);

    使用例子如下:

    var dateTimeStr = "07-13 15:50:42";
    var dateTime = DateTime.ParseExact(dateTimeStr, "MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

    同样我们也将其封装一下:

            /// <summary>
            /// 转换为日期,根据自定义格式字符串
            /// </summary>
            /// <param name="data"></param>
            /// <param name="format"></param>
            /// <param name="provider"></param>
            /// <returns></returns>
            public static DateTime ToDate(object data, string format, IFormatProvider provider = null)
            {
                if (data == null)
                    return DateTime.MinValue;
    
                DateTime result;
                return DateTime.TryParseExact(data.ToString(), format, provider ?? CultureInfo.InvariantCulture,
                    DateTimeStyles.None, out result)
                    ? result
                    : DateTime.MinValue;
            }
    
            /// <summary>
            /// 转换为可空日期
            /// </summary>
            /// <param name="data">数据</param>
            public static DateTime? ToDateOrNull(object data, string format, IFormatProvider provider = null)
            {
                if (data == null)
                    return null;
                DateTime result;
                if (DateTime.TryParseExact(data.ToString(), format, provider ?? CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
                    return result;
                return null;
            }
  • 相关阅读:
    python爬虫之趟雷
    python附录-builtins.py模块str类源码(含str官方文档链接)
    python-基础学习篇(一)
    pycharm和webstorm永久激活方法
    计算机网络基础概述
    计算机基础
    B/S和C/S架构简单理解
    认识HTML中文本、图片、链接标签和路径
    结对开发
    全国疫情可视化地图 (一)
  • 原文地址:https://www.cnblogs.com/whai/p/5012174.html
Copyright © 2011-2022 走看看