如何将sqldatetime.minvalue转换为datetime?

我似乎无法将sqldatatime.minvalue转换为date时间对象。

我试过了:

Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue); 

这显然不起作用。

任何原因不只是使用显式的转换操作符 ?

 DateTime dt = (DateTime) SqlDateTime.MinValue; 

这对我行得通:

 using System; using System.Data.SqlTypes; class Test { static void Main() { DateTime dt = (DateTime) SqlDateTime.MinValue; Console.WriteLine(dt); } } 

无需转换。 SqlDateTime有一个返回DateTime的Value属性。

 DateTime dt = SqlDateTime.MinValue.Value; 

您收到的答案已经向您显示了两种不同的方式来转换价值。 一种是使用为SqlDateTimeDateTime定义的显式转换,另一种是访问SqlDateTime实例上的.Value属性,该属性返回一个DateTime

 var date = theSqlDate.Value; // via property var date = (DateTime)theSqlDate; // via explicit conversion 

有一些值得考虑的折衷。 SqlDateTime值支持数据库中空值的概念(DBNull,由另一个现在被删除的答案引用)。 如果您访问“null”实例的Value属性,则会遇到SqlNullValueException 。 另一方面,显式转换为DateTime导致{January 1, 1900 12:00:00 AM} 。 这些结果都不会在你的代码中被期望。 在数据库中用一个非空默认值覆盖一个有效的空条目可能和在运行时得到一个exception一样糟糕。

如果数据库中有一个可为空的列,并且正在使用SqlDateTime ,则可能需要以不同方式显式testing和处理SqlDateTime.Null ,然后使用哪种方法转换其他值可能无关紧要。

 DateTime? date; if (theSqlDate.Equals(SqlDateTime.Null)) date = null else date = theSqlDate.Value; // or (DateTime)theSqlDate;