string转DateTime(时间格式转换)
1、不知道为什么时间在数据库用varchar(8)来保存,例如"19900505",但是这样的保存格式在处理时间的时候是非常不方便的。
但是转换不能用Convert.ToDateTime(string s),详细可以参考
//
// 摘要:
// 将日期和时间的指定字符串表示形式转换为等效的日期和时间值。
//
// 参数:
// value:
// 日期和时间的字符串表示形式。
//
// 返回结果:
// value 的值的日期和时间等效项,如果 value 为 null,则为 System.DateTime.MinValue 的日期和时间等效项。
//
// 异常:
// System.FormatException:
// value 不是格式正确的日期和时间字符串。
public static DateTime ToDateTime(string value);
Convert.ToDateTime
也不能用DateTime.Parse(string s),详细参考
//
// 摘要:
// 将日期和时间的指定字符串表示形式转换为其等效的 System.DateTime。
//
// 参数:
// s:
// 包含要转换的日期和时间的字符串。
//
// 返回结果:
// 一个对象,它等效于 s 中包含的日期和时间。
//
// 异常:
// System.ArgumentNullException:
// s 为 null。
//
// System.FormatException:
// s 中不包含有效的日期和时间的字符串表示形式。
public static DateTime Parse(string s);
DateTime.Parse
之所以不能用这两个内置的方法是因为s的格式不能被识别,能识别的格式为"yyyy-MM-dd",类似这样的格式才能被识别。
所以,纠结到最后还是自己写了个方法,如下:
/// <summary>
/// 获取年龄
/// </summary>
/// <param name="birthday"></param>
/// <returns></returns>
public string GetAge(string birthday)
{
DateTime sNow = DateTime.Now;
DateTime.Parse(birthday);
Convert.ToDateTime(birthday);
int year = Convert.ToInt32(birthday.Substring(, ));
int month = Convert.ToInt32(birthday.Substring(, ));
int iAge = (sNow.Year * + sNow.Month - year * - month)/;
return iAge.ToString();
}
顺便对Convert类和Parse做了一些了解。
以下内容来世msdn(http://technet.microsoft.com/zh-cn/subscriptions/system.convert(v=vs.95).aspx)
Convert类主要的一个作用是将一个基本数据类型转换为另一个基本数据类型。
Convert 类的静态方法用于支持 .NET Framework 中与基数据类型之间的转换。 受支持的基类型是Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime 和 String。
与基类型之间的转换
存在将每个基类型转换为每个其他基类型的转换方法。 但是,根据运行时基类型和目标基类型的值,对特定转换方法的实际调用会产生五种结果之一。 这五种结果如下:
1、无转换。 当尝试将一个类型转换为其本身时(如使用 Int32 类型参数调用 Convert.ToInt32(Int32))会发生这种情况。 在这种情况下,此方法只是返回原始类型实例。
2、一个 InvalidCastException。 当不支持特定转换时会发生这种情况。 以下转换会引发 InvalidCastException。
将 Char 转换为 Boolean、Single、Double、Decimal 或 DateTime。
将 Boolean、Single、Double、Decimal 或 DateTime 转换为 Char。
将 DateTime 转换为 String 以外的任何其他类型。
将 String 以外的任何其他类型转换为 DateTime。
3、FormatException 。 当由于字符串格式不正确而导致将字符串值转换为任何其他基类型的尝试失败时,会发生该异常。 以下转换会引发该异常:
要转换为 Boolean 值的字符串不等于 Boolean.TrueString 或 Boolean.FalseString。
要转换为 Char 值的字符串由多个字符组成。
要转换为任何数值类型的字符串没有被识别为有效数字。
要转换为 DateTime 值的字符串没有被识别为有效日期和时间值。
4、转换成功。 对于前面结果中未列出的两个不同基类型之间的转换,所有扩大转换和不会导致数据丢失的收缩转换都将成功,此方法将返回目标基类型的值。
5、OverflowException。 当收缩转换导致数据丢失时会发生这种情况。 例如,尝试将值为 10000 的 Int32 实例转换为 Byte 类型会引发 OverflowException,因为 10000 超出了 Byte 数据类型的范围。
如果数字类型转换导致精度丢失(即某些最低有效位丢失),不引发异常。 但是,如果结果超出了特定转换方法的返回值类型所能表示的范围,则将引发异常。
例如,当将 Double 转换为 Single 时,可能会发生精度丢失,但并不引发异常。 但是,如果 Double 的值太大,无法由 Single 表示,则将引发溢出异常。
从自定义对象转换为基类型
除了支持基类型之间的转换外,Convert 方法还支持将任何自定义类型转换为任何基类型。 为此,自定义类型必须实现 IConvertible 接口,该接口定义用于将实现类型转换为每个基类型的方法。 特定类型不支持的转换会引发 InvalidCastException。
向 ChangeType 方法传递自定义类型作为其第一个参数时,或者在调用 Convert.ToType 方法(如 Convert.ToInt32(Object) 或 Convert.ToDouble(Object, IFormatProvider))并向其传递自定义类型的实例作为其第一个参数时,Convert 方法反过来会调用自定义类型的 IConvertible 实现以执行转换。 有关更多信息,请参见 .NET Framework for Silverlight 中的类型转换。
区域性特定的格式设置信息
所有基类型转换方法和 ChangeType 方法都包括具有类型为 IFormatProvider 的参数的重载。 例如,Convert.ToBoolean 方法具有下面两个重载:
Convert.ToBoolean(Object, IFormatProvider)
Convert.ToBoolean(String, IFormatProvider)
IFormatProvider 参数可以提供区域性特定的格式设置信息以帮助转换过程。 但是,大多数基类型转换方法忽略了该参数。 只有下列基类型转换方法使用该参数:
将值转换为数值类型的方法。 IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。 它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用(如果对象的运行时类型为 String)。
将值转换为日期和时间的方法。 IFormatProvider 参数由具有类型为 String 和 IFormatProvider 的参数的重载使用。 它也由具有类型为 Object 和 IFormatProvider 的参数的重载使用(如果对象的运行时类型为 String)。
包含 IFormatProvider 参数并将数字值转换为字符串或将 DateTime 值转换为字符串的 Convert.ToString 重载。
但是,实现 IConvertible 的任何用户定义类型都可以使用 IFormatProvider 参数。
其他转换方法
有一组方法可支持字节数组与 String 或由以 64 为基的数字字符组成的 Unicode 字符数组之间的转换。 表示为以 64 为基的数字的数据可以很容易地通过只能传输 7 位字符的数据信道进行传送。
Parse意为解析方法,顾名思义就是解析字符串的方法,例如DateTime.Parse(string s),就是将s解析成DateTime格式,即将日期和时间的字符串表示形式转换为其等效的DateTime。
但需要注意是因为日期和时间的字符串表示形式必须符合公认的模式,你应该总是调用时使用异常处理解析方法来分析用户的输入。 如果你不想处理异常,你可以调用的DateTime 。TryParse的方法来分析日期和时间字符串,这个方法返回一个值,指示分析操作是否成功。
更多细节请参考(http://msdn.microsoft.com/zh-cn/library/System.DateTime.Parse(v=vs.110).aspx)
-----------------------------------------------------我是分割线--------------------------------------------------------
感谢@muki的指导,其中还有个比较方便的方法是DateTime.ParseExact(string s, string format, IFormatProvider provider),详细如下
//
// 摘要:
// 使用指定的格式和区域性特定格式信息,将日期和时间的指定字符串表示形式转换为其等效的 System.DateTime。 字符串表示形式的格式必须与指定的格式完全匹配。
//
// 参数:
// s:
// 包含要转换的日期和时间的字符串。
//
// format:
// 用于定义所需的 s 格式的格式说明符。
//
// provider:
// 一个对象,提供有关 s 的区域性特定格式信息。
//
// 返回结果:
// 一个对象,它等效于 s 中包含的日期和时间,由 format 和 provider 指定。
//
// 异常:
// System.ArgumentNullException:
// s 或 format 为 null。
//
// System.FormatException:
// s 或 format 是空字符串。 - 或 - s 不包含与 format 中指定的模式相对应的日期和时间。 - 或 - s 中的小时组成部分和
// AM/PM 指示符不一致。
public static DateTime ParseExact(string s, string format, IFormatProvider provider);
DateTime ParseExact
其中需要注意的是虽然这个方法能直接"读懂""yyyyMMdd",但是你必须在format这个参数中指定,而且s的长度必须和format一致,不然同样会报错。另外一个值得注意的地方是provider参数,参数解释为 一个对象,提供有关 s 的区域性特定格式信息,如关联的语言、子语言、国家/地区、日历和区域性约定。
如关联的语言、子语言、国家
/
地区、
日历和区域性约定。
关于Convert.ToDateTime(string s),DateTime.Parse(string s)有什么区别,如果您有更详细的说明和更深入的理解请和我交流,如果有不正确的地方请多多指教。
再次感谢您的阅读,感谢各位大大!
string转DateTime(时间格式转换)的更多相关文章
- scala 时间格式转换(String、Long、Date)
1)scala 时间格式转换(String.Long.Date) 1.时间字符类型转Date类型 [java] view plain copy import java.text.SimpleDateF ...
- C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)
C# MVC 用户登录状态判断 来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...
- C# 判断一个string型的时间格式是否正确
在项目开发过程中,由于各种坑爹的需求,我们可能需要用户自己手动输入时间,不过这种功能一般都出现在自己家的后台里面,咳咳,言归正传.既然如此,那么这个时候我们就需要对用户手动输入的时间格式进行验证,方法 ...
- SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- SQL Server日期时间格式转换字符串
在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...
- C# DateTime时间格式转换为Unix时间戳格式
double ntime=dateTimeToUnixTimestamp(DateTime.Now); long g1 = GetUnixTimestamp(); long g2 = ConvertD ...
- Sql日期时间格式转换;取年 月 日,函数:DateName()、DATEPART()
一.sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007 ...
- SQL Server日期时间格式转换字符串详解
本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...
- sql 日期时间格式转换
Sql日期时间格式转换 sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, ...
- DateTime时间格式转换为Unix时间戳格式
/// <summary> /// 将DateTime时间格式转换为Unix时间戳格式 /// </summary> /// <param name="date ...
随机推荐
- JS中call和apply
作用: 替换当前对象的方法中的this. 理解: call和apply是为了动态改变this出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作 ...
- 深入理解docker的link机制
https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来 ...
- thinkphp 模板里a标签 href 带参数的 使用U函数方法
简单的说就是模板里 分类的链接地址 实现这个样子的 <a href="/index.php/Home/Category/assortment/cateid/2.html"&g ...
- asp.net mvc ClaimsIdentity 授权研究 (还是测试版 有bug)
安装 Microsoft.Owin.Host.SystemWeb Identity.Core Microsoft.Owin.Security.Cookies 在是startup.cs做如下修改 p ...
- css1-css3的那些模糊点
css很重要, 但也不是万能的, 也不能抛弃dom 元素和 元素的属性!! 很多时候, dom "元素" 的 "属性" 也很重要 也很实用! 要结合属性来写 包 ...
- abrtd是什么进程
abrtd 是一个守护进程监控的应用程序崩溃.当发生崩溃时,它将收集的崩溃(核心文件的命令行, etc .)application ,并采取措施根据类型崩溃并根据 abrt.conf config 文 ...
- Linux命令笔记(一)
vi 有三种模式,输入模式,编辑模式,“:”命令模式vi 进入以后默认是编辑模式vi 编辑模式默认的快捷键 上下左右分别是 J K H Lvi 在编辑模式使用 i 可以进入输入模式vi 输入模式只能输 ...
- 【Solr】Solr的安装部署
目录 Solr安装部署 Solr Web界面分析 回到顶部 solr安装和部署 solr下载 http://lucene.apache.org/ 安装solr,就是去部署它的war包,war包所在的位 ...
- C#5.0 特性
Visual Studio 2012 中 Visual C# 的新增功能 Lambda表达式 表达式树:把代码,转换成数据,然后分析数据发现其组成部分,最后转换成可以传递到其他程序的字符串 LinQ表 ...
- UI第五节——手势
#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL ...