如何将sqldatetime.minvalue转换为datetime?

cod*_*ing 55 c# datetime

我似乎无法将sqldatatime.minvalue转换为datetime对象.

我试过了:

Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.

Jef*_*ata 149

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

DateTime dt = SqlDateTime.MinValue.Value;
Run Code Online (Sandbox Code Playgroud)

  • 一个罕见的问题,对Jon Skeets有更好的答案:-) (37认同)
  • 我没有看到即将到来. (2认同)

Jon*_*eet 73

有什么理由不使用显式转换运算符

DateTime dt = (DateTime) SqlDateTime.MinValue;
Run Code Online (Sandbox Code Playgroud)

这对我行得通:

using System;
using System.Data.SqlTypes;

class Test
{
    static void Main()
    {
        DateTime dt = (DateTime) SqlDateTime.MinValue;
        Console.WriteLine(dt);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @codecompleting,`Convert.ToDateTime`需要一个适当的重载来支持`SqlDateTime`值.`Convert`的设计者一定不能认为它[足够重要],而`SqlDateTime`的设计者肯定会这样做. (4认同)

Ant*_*ram 17

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

var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion
Run Code Online (Sandbox Code Playgroud)

有一些值得考虑的权衡.SqlDateTime通过值支持数据库中的空值的概念(DBNull,由另一个现在删除的答案引用)SqlDateTime.Null.如果您Value在"null"实例上访问该属性,您将遇到一个SqlNullValueException.另一方面,显式转换为DateTime会导致{January 1, 1900 12:00:00 AM}.您的代码中可能不需要这些结果.使用非null默认值覆盖数据库中的有效空条目可能与在运行时获取异常一样糟糕.

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

DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
    date = null
else 
    date = theSqlDate.Value; // or (DateTime)theSqlDate;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个罕见的答案,比一个比Jon Skeet更好的答案更好. (8认同)