我刚刚发现我的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日,但它确实(在某些机器上)。 我的代码不使用日期的分钟和秒,并且应始终保持默认值。
答案 0 :(得分:1)
我知道这个问题发生在旧的Windows NT机器上,日期范围是1953-XXXX,而不是1753-9999。你完全确定这些机器都运行Windows XP吗?
答案 1 :(得分:0)
你确定你对不同的价值观是正确的吗?对于所有版本的.NET Framework,SqlDateTime
为documented 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看起来正在返回一个差值,而实际上它是字符串格式化实际上是问题(例如区域性)设置)。