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

将日期和时间的字符串表示形式转换为其等效的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;
}

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

  1. mysql学习1:数据类型:数字型,日期和时间,字符串类型(总结)

    mysql数据类型:数字型,日期和时间,字符串类型 摘要 MySQL中定义数据字段的类型对数据库的优化是非常重要的: MySQL支持多种类型,大致可以分为三类,如下. 数字类型 整数:tinyint. ...

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

    python 日期.时间.字符串相互转换 在python中,日期类型date和日期时间类型dateTime是不能比较的. (1)如果要比较,可以将dateTime转换为date,date不能直接转换为 ...

  3. python 日期、时间、字符串相互转换(转载)

    原文链接:https://www.cnblogs.com/huhu-xiaomaomi/p/10338472.html 在python中,日期类型date和日期时间类型dateTime是不能比较的. ...

  4. Sqlite日期类型问题:该字符串未被识别为有效的 DateTime(String not recognized as a valid datetime)

    使用SQLite抛出异常: 该字符串未被识别为有效的 DateTime 错误(String not recognized as a valid datetime) 解决方法: 也可以在连接字符串 修改 ...

  5. matlab中datest() 将日期和时间转换为字符串格式

    来源:https://ww2.mathworks.cn/help/matlab/ref/datestr.html?searchHighlight=datestr&s_tid=doc_srcht ...

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

    一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date();  //以当前日期和时间创建实例. ...

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

    本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时 ...

  8. JDK中日期和时间的几个常用类浅析(三)

    java.text.SimpleDateFormat   SimpleDateFormat类是用于把字符串解析成日期时间和把日期时间格式化成字符串的工具类.该类主要和java.util.Date类配合 ...

  9. 【转】Python之日期与时间处理模块(date和datetime)

    [转]Python之日期与时间处理模块(date和datetime) 本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常 ...

随机推荐

  1. Thinkphp3.2.X自动生成应用目录

    从3.2.2版本开始,可以支持自动生成默认模块之外的模块目录以及批量生成控制器和模型类. 例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下: // 绑定Admin模块到当 ...

  2. 查看tomcat部署的项目名

    Myeclips的查看方法 项目名右键-->properties-->Myeclips-->deployment 这里虽然可以改这个路径的项目名 但是一般不建议更改 避免出现未知错误 ...

  3. linux 和 windows 安装composer

    在 Linux 和 Mac OS X 中可以运行如下命令: curl -sS https://getcomposer.org/installer | phpmv composer.phar /usr/ ...

  4. 14.Promise对象

    1.Promise的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Pro ...

  5. Windows里下载并安装phpstudy(图文详解)

    不多说,直接上干货! 帮助站长快速搭建网站服务器平台! phpstudy软件简介 此是基于phpStudy 2016.01.01. 该程序包集成最新的Apache+Nginx+LightTPD+PHP ...

  6. css3圆形轨迹动画

    <!doctype html>      <html lang="en">      <head>          <meta char ...

  7. Struts2 Servelet重构

    这是利用action模仿请求Servelet(单例) 作用: 1.减少web.xml代码量 2.将servelet中的代码转移到action中,只需要在action中定义业务逻辑则可. 1.定义一个过 ...

  8. C#中的委托 Delegate(委托 也叫代表,代表一类方法)

    1. 委托类似与 C或C++中的函数指针,但委托是 面向对象的,并且是类型安全的 详情可查看官方文档:https://msdn.microsoft.com/en-us/library/ms173172 ...

  9. java多线程---------java.util.concurrent并发包----------等待多线程完成

    一.等待多线程完成的join的使用.CoundownLantch.CyclicBarrier .

  10. concurrency基础

    Runnable 一个执行任务,没有返回值,也不能抛出受检查异常 Callable 一个执行任务有返回值,也能抛出受检查异常 Future 表示执行任务的生命周期,任务的生命周期为:创建,提交,开始, ...