C#:为什么我的SqlDateTime.MinValue在不同的机器上有所不同?

时间:2010-01-12 11:00:26

标签: c# datetime

我刚刚发现我的SqlDateTime.MinValue在不同的机器上是不同的。

有时它是= DateTime(1953,1,1,0,0,0);

但在其他机器上它是= DateTime(1753,1,1,0,0,0);

怎么会这样?两台机器上的操作系统都是WinXP SP2。

修改

我的代码是这样的:

DateTime date;

...

if (date == SqlDateTime.MinValue)
{
    return "(any)";
}
else
{
    return date.ToString();
} 

此代码永远不会返回1753年1月1日,但它确实(在某些机器上)。 我的代码不使用日期的分钟和秒,并且应始终保持默认值。

4 个答案:

答案 0 :(得分:1)

我知道这个问题发生在旧的Windows NT机器上,日期范围是1953-XXXX,而不是1753-9999。你完全确定这些机器都运行Windows XP吗?

答案 1 :(得分:0)

你确定你对不同的价值观是正确的吗?对于所有版本的.NET Framework,SqlDateTimedocumented as having a fixed start date at MSDN

  

SqlDateTime结构的最小有效日期是1753年1月1日。

如果它真的可重现,那么听起来它似乎是.NET Framework(或文档)中的一个错误,因此微软将成为寻求帮助的人。如果发现问题是一个错误,支持电话是免费的。

答案 2 :(得分:0)

正如其他人所说,SqlDateTime 静态构造函数设置了年份。因此,除非你调用另一个构造函数,否则没有明显的解释。

static SqlDateTime()
{
    ...
    MinYear = 1753;
    ...
}

反射器将其显示为0x6d9

答案 3 :(得分:0)

略微切线,但是当您使用SqlDateTime.MinValue作为特殊值时,我建议您使用nullable DateTime,如下所示:

DateTime? date = null;
...
if (!date.HasValue)
{
    return "(any)";
}
else
{
    return date.Value.ToString();
} 

注意可空类型的简写是使用问号:例如日期时间?

正如我在评论中所说的,我想知道是否存在一个强制转换字符串使得SqlDateTime.MinValue看起来正在返回一个差值,而实际上它是字符串格式化实际上是问题(例如区域性)设置)。