DateTime与SqlDateTime.MinValue的比较

本文关键字:比较 MinValue SqlDateTime DateTime | 更新日期: 2023-09-27 18:13:29

当我比较DateTime变量与SqlDateTime。MinValue:

if (StartDate > SqlDateTime.MinValue)
{
  // some code
}

如果StartDate是

SqlDateTime溢出。必须在1753年1月1日12:00:00 AM和12/31/9999 11:59:59 PM

这可以很容易地通过一个小的改变来解决:

if (StartDate > SqlDateTime.MinValue.Value)
{
  // some code
}

我知道在第一个代码片段中我是在比较苹果和橘子。我不明白的是异常消息。似乎我正在分配一个DateTime值给SqlDateTime变量。

我错过了什么?

DateTime与SqlDateTime.MinValue的比较

. net原生DateTime类型(具体地说,它是一个结构)包含的可能值范围比SqlDateTime数据类型所能支持的范围更广。更具体地说,DateTime值的范围可以从01/01/0000到理论上的12/31/9999。

当编译器试图强制类型进行比较时,它试图将DateTime值(MinValue.Value)放在SqlDateTime支持的范围之外(在上下文中低于或"之前")-因此溢出。

From SqlDateTime Structure on MSDN:

<

SqlDateTime结构/strong>

表示从1753年1月1日到9999年12月31日的日期和时间数据,准确度为3.33毫秒,将存储在数据库中或从数据库中检索。SqlDateTime结构具有与其对应的。net Framework类型DateTime不同的底层数据结构,DateTime可以表示从12:00:00 AM 1/1/0001到11:59:59 PM 12/31/9999之间的任何时间,精确到100纳秒。SqlDateTime实际上存储与1900年1月1日00:00:00 AM的相对差值。因此,从"00:00:00 AM 1/1/1900"&;到整数将返回0。