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 中与基数据类型之间的转换。 受支持的基类型是BooleanCharSByteByteInt16Int32Int64UInt16UInt32UInt64SingleDoubleDecimalDateTime 和 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(时间格式转换)的更多相关文章

  1. scala 时间格式转换(String、Long、Date)

    1)scala 时间格式转换(String.Long.Date) 1.时间字符类型转Date类型 [java] view plain copy import java.text.SimpleDateF ...

  2. 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 ...

  3. C# 判断一个string型的时间格式是否正确

    在项目开发过程中,由于各种坑爹的需求,我们可能需要用户自己手动输入时间,不过这种功能一般都出现在自己家的后台里面,咳咳,言归正传.既然如此,那么这个时候我们就需要对用户手动输入的时间格式进行验证,方法 ...

  4. SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  5. SQL Server日期时间格式转换字符串

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  6. C# DateTime时间格式转换为Unix时间戳格式

    double ntime=dateTimeToUnixTimestamp(DateTime.Now); long g1 = GetUnixTimestamp(); long g2 = ConvertD ...

  7. Sql日期时间格式转换;取年 月 日,函数:DateName()、DATEPART()

    一.sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007 ...

  8. SQL Server日期时间格式转换字符串详解

    本文我们主要介绍了SQL Server日期时间格式转换字符串的相关知识,并给出了大量实例对其各个参数进行对比说明,希望能够对您有所帮助. 在SQL Server数据库中,SQL Server日期时间格 ...

  9. sql 日期时间格式转换

    Sql日期时间格式转换   sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, ...

  10. DateTime时间格式转换为Unix时间戳格式

    /// <summary> /// 将DateTime时间格式转换为Unix时间戳格式 /// </summary> /// <param name="date ...

随机推荐

  1. C-结构体、枚举

    #include <stdio.h> //结构体:可以由多个不同类型的数据构成 int main() { struct Person { //里面的3个变量,可以称为是结构体的成员或者属性 ...

  2. Python开发【第十六篇】:AJAX全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  3. shell编程中for file in $*; do是什么意思.

    $*是此行命令所在函数(脚本)的所有被传入参数的合集与$@类似,不用引号的情况下没有区别区别是当被""扩起来以后"$*"被当做一个字符串"$@&quo ...

  4. django学习<一>:安装

    这两天打算摸索下和python相关的东西,然后正好小伙伴有个关于网站的任务,就怀着好奇的心态了解了下,然后就很自然地开始涉及django的问题. 首先就是django安装的问题,想不到第一步就出问题了 ...

  5. 解析posix与perl标准的正则表达式区别 ---PHP

        正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式.正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系 ...

  6. ELK日志分析系统(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://467754239.blog.51cto.com/4878013/1700828 ...

  7. nyoj 14 会场安排问题(贪心专题)java

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...

  8. mysql-mysql优化

    mysql数据库优化1.查询优化 (1)避免where 子句中对字段进行 null 值判断 (2)避免在 where 子句中使用 or 来连接条件 (3)少使用like,如果要用可以考虑全文检索 (4 ...

  9. springmvc之DispatcherServlet

    1.作用:DispatcherServlet是前置控制器,配置在web.xml(因为DispatcherServlet是一个servelet)文件中的.拦截匹配的请求,Servlet拦截匹配规则要自已 ...

  10. 用jQuery实现的一种网页内容呈现方式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...