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;
        }
时间: 2024-10-18 10:46:23

C# 日期和时间的字符串表示形式转换为其等效的DateTime(stringToDateTime)的相关文章

python 日期、时间、字符串相互转换

python 日期.时间.字符串相互转换 在python中,日期类型date和日期时间类型dateTime是不能比较的. (1)如果要比较,可以将dateTime转换为date,date不能直接转换为dateTime import datetime dateTime_p = datetime.datetime.now() date_p = dateTime_p.date() print(dateTime_p) #2019-01-30 15:17:46.573139 print(date_p) #

MySQL 数据类型:数值、日期和时间、字符串等类型详解

MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT.REAL和DOUBLE PRECISION). 关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词. BIT数据类型保存位字

《Javascript权威指南》13号学习笔记:使用日期和时间

一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. var date = new Date(value);  //value是必选项,假设是数值.value表示指定日期与1970.1.1午夜之间的毫秒数.假设是字符串.value则依照parse()方法中的规则进行解析. 全局的Date()函数完毕与new Date(value)同样的功能 var d

Python之日期与时间处理模块(date和datetime)

本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时间 用日期命名一个日志文件的名称 记录或展示某文章的发布或修改时间 其他 Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.datetime模块和calendar模块.其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库

《Javascript权威指南》学习笔记之十三:处理日期和时间

一.创建Date实例 1.Date类的方法和属性很多不是静态的,因此,在应用Date类的属性和方法之前,必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. var date = new Date(value);  //value是必选项,如果是数值,value表示指定日期与1970.1.1午夜之间的毫秒数:如果是字符串,value则按照parse()方法中的规则进行解析.全局的Date()函数完成与new Date(value)相同的功能

python 3 之日期与时间处理模块(date和datetime)

前言相关术语的解释时间的表现形式time模块datetime模块时间格式码总结前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出计算某个功能的执行时间用日期命名一个日志文件的名称记录或展示某文章的发布或修改时间其他Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.datetime模块和calendar模块.其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致.time模块

MySQL数据类型--------日期与时间类型实战

1. 背景 * MySQL支持多种表示日期和时间的数据类型,如YEAR.TIME.DATETIME.TIMESTAMP等等-- * MySQL 5.6.4版本开始支持微秒(支持类型:TIMTE.DATETIME.TIMESTAMP, 微秒长度最大为6) 2. 日期与时间类型所属空间与表示范围 类型 5.6.4版本之前 占用字节 5.6.4版本之后 (包含5.6.3版本) 占用字节 表示范围 DATETIME 8 6+(微秒长度-1 )/2 1000-01-01 00:00:00 ~ 9999-1

C#-VS字符串、日期、时间和时间段

小知识 哈希表,内存中的对象,用速度很快的哈希表当字典表,记录主键和内容. @,遇到转义字符,不转义,直接输出,即就是.转义字符是反斜杠/ 全部的内置类型都用类和结构描述.值类型用结构,引用类型用类.如int用system.Int32结构,double用system.Double结构,bool用system.Boolean结构. 对类来说,null是没有引用,到字符串,空串也是有引用对象,只是对象是内容是空的. String类 string类型实际上是string类的对象,字符串.类的实例都是对

freemarker字符串转换成日期和时间

1.日期时间转换总结 (1)date用来转换为日期 (2)time用来转换为时间 (3)datetime用来转换为日期和时间 2.展示示例 <#--字符串转换为日期和时间--> <#--date用来转换为日期--> <#assign sun = "2014-05-31"/> ${sun?date("yyyy-MM-dd")} <#--time用来转换为时间--> <#assign li = "12:03