覆盖DateTime.MinValue

时间:2010-02-28 17:51:44

标签: c# datetime

我正在使用返回1.1.0001的Datetime.Minvalue。此值无法存储到DB,因为年份小于1975年。

是否可以将DateTime.Minvalue覆盖为1.1.1901?

此致

7 个答案:

答案 0 :(得分:7)

不,不是。您可以使用SqlDateTime.MinValue(1753-01-01),为1901-01-01定义自己的常量,如果这是你想要使用的,或者实际使用可以为空的DateTime:

DateTime? dateVal = null;

在没有指定日期的情况下,null可能更有意义并且将DBNull.Value持久保存到数据库而不是像您当前正在执行的“特殊”值。

或者,作为最终选项......在您继续访问数据库时,请检查DateTime.MinValue并切换替代方案。但我推荐可以为空的DateTime。

答案 1 :(得分:4)

有可能。每个发现此代码的人都会讨厌你。有些人可能会伤害你。

typeof(DateTime)
    .GetField ("MinValue")
    .SetValue (typeof(DateTime), new DateTime(1901, 1, 1));

答案 2 :(得分:1)

如何使用此方法

DateTime GetMinDateTime()
{
   return DateTime.MinValue.AddYears(900);
}

答案 3 :(得分:0)

你应该使用可以为空的DateTime。

答案 4 :(得分:0)

不,这是一个静态字段,无法覆盖。

您需要编写Guard或某种转换

答案 5 :(得分:0)

没有。由于DateTime.MinValue是静态的,因此没有简单的覆盖方法。我建议用常量替换DateTime.MinValue,或者在数据访问代码中,将DateTime.MinValue的DateTime值转换为1900-01-01。

答案 6 :(得分:0)

如果您只编写Microsoft SQL Server,则可以将System.DateTime替换为System.Data.SqlTypes.SqlDateTime。如果我已正确理解,System.Data.SqlTypes数据类型与数据库数据类型直接兼容,这可以避免遇到的情况。