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;
}
C# 日期和时间的字符串表示形式转换为其等效的DateTime(stringToDateTime)的更多相关文章
- mysql学习1:数据类型:数字型,日期和时间,字符串类型(总结)
mysql数据类型:数字型,日期和时间,字符串类型 摘要 MySQL中定义数据字段的类型对数据库的优化是非常重要的: MySQL支持多种类型,大致可以分为三类,如下. 数字类型 整数:tinyint. ...
- python 日期、时间、字符串相互转换
python 日期.时间.字符串相互转换 在python中,日期类型date和日期时间类型dateTime是不能比较的. (1)如果要比较,可以将dateTime转换为date,date不能直接转换为 ...
- python 日期、时间、字符串相互转换(转载)
原文链接:https://www.cnblogs.com/huhu-xiaomaomi/p/10338472.html 在python中,日期类型date和日期时间类型dateTime是不能比较的. ...
- Sqlite日期类型问题:该字符串未被识别为有效的 DateTime(String not recognized as a valid datetime)
使用SQLite抛出异常: 该字符串未被识别为有效的 DateTime 错误(String not recognized as a valid datetime) 解决方法: 也可以在连接字符串 修改 ...
- matlab中datest() 将日期和时间转换为字符串格式
来源:https://ww2.mathworks.cn/help/matlab/ref/datestr.html?searchHighlight=datestr&s_tid=doc_srcht ...
- 《Javascript权威指南》13号学习笔记:使用日期和时间
一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date(); //以当前日期和时间创建实例. ...
- Python之日期与时间处理模块(date和datetime)
本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时 ...
- JDK中日期和时间的几个常用类浅析(三)
java.text.SimpleDateFormat SimpleDateFormat类是用于把字符串解析成日期时间和把日期时间格式化成字符串的工具类.该类主要和java.util.Date类配合 ...
- 【转】Python之日期与时间处理模块(date和datetime)
[转]Python之日期与时间处理模块(date和datetime) 本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常 ...
随机推荐
- Java异常机制关键字总结,及throws 和 throw 的区别
在Java的异常机制中,时常出现五个关键字:try , catch , throw , throws , finally. 下面将总结各个关键字的用法,以及throw和throws的区别: (1) t ...
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method解决方法
报错日记: Caused by: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getUserAuthLeve ...
- C# virtual abstract
virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能 ...
- PHP之string之addcslashes()函数使用
addcslashes (PHP 4, PHP 5, PHP 7) addcslashes - Quote string with slashes in a C style addcslashes - ...
- [中英对照]The sysfs Filesystem | sysfs文件系统
The sysfs Filesystem | sysfs文件系统 Abstract | 摘要 sysfs is a feature of the Linux 2.6 kernel that allow ...
- Spring MVC 使用kaptcha生成验证码
Spring MVC 使用kaptcha生成验证码 1.下载kaptcha-2.3.2.jar(或直接通过该文章附件下载) http://code.google.com/p/kaptcha/downl ...
- Windump 的用法/Windump 是什么?
Windump Windump是Windows环境下一款经典的网络协议分析软件,其Unix版本名称为Tcpdump.它可以捕捉网络上两台电脑之间所有的数据包,供网络管理员/入侵分析员做进一步流量分 ...
- <数据挖掘导论>读书笔记9聚类分析
1. 聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组. 其目标是组内的对象相互之间是相似的或者相关的,而不同组中的对象是不同的或者不相关的. 2.聚类分析的重要技术 K均值:K均值 ...
- 【LeetCode题解】349_两个数组的交集
目录 [LeetCode题解]349_两个数组的交集 描述 方法一:两个哈希表 Java 实现 类似的 Java 实现 Python 实现 类似的 Python 实现 方法二:双指针 Java 实现 ...
- [转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
本文转自:http://www.cnblogs.com/VolcanoCloud/p/5572408.html 官方文档英文地址:https://github.com/aspnet/EntityFra ...