设置一个空的DateTime变量

本文关键字:DateTime 变量 一个 设置 | 更新日期: 2023-09-27 18:29:51

我会声明一个空的字符串变量,如下所示:

    string myString = string.Empty;

有"DateTime"变量的等价项吗?

更新:

问题是我在SQL中将此"DateTime"用作"StoredProcedure"的参数。例如:

    DateTime? someDate = null;
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);

当我运行此代码时,会捕捉到一个异常,告诉我"StoredProcedure"需要一个"@SurgeryDate"参数。但我提供了它。知道为什么吗?

设置一个空的DateTime变量

由于DateTime是一种值类型,您不能将null分配给它,但正是在这些情况下(没有值)引入了Nullable<T>-请使用可为null的DateTime

DateTime? myTime = null;

否。您有两个选项:

DateTime date = DateTime.MinValue;

当你需要每隔X段时间做一件事时(因为你总是超过MinValue),这很有效,但如果你不小心,实际上可能会导致细微的错误(比如使用一些运算符,如果你不是MinValue,则不首先检查)。

您可以使用Nullable:

DateTime? date = null;

这很好,避免了大多数问题,同时只引入了1或2个。

这真的取决于你想要实现什么。

您可以将DateTime变量设置为"1/1/0001 00:00:00",但变量本身不能为null。要获得此MinTime,请使用:

DateTime variableName = DateTime.MinValue;

您可能需要使用一个可以为null的日期时间。Datetime? someDate = null;

在这种情况下,你可能会发现有人使用DateTime.MaxDateTime.Min,但我非常怀疑你是否想这样做。它会导致边缘情况、更难读取的代码等方面的错误。

任一:

DateTime dt = new DateTime();

DateTime dt = default(DateTime);

如果将日期设置为

DateTime someDate = new DateTime();

"someDate"的值设置为{1/1/0001 12:00:00 AM}

您使用的方法(AddWithValue)不会将null值转换为数据库null。您应该使用DBNull.Value

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate
);

如果不是null,这将传递someDate值,否则传递DBNull.Value值。在这种情况下,将向数据库传递正确的值。

选项1:使用可为null的DateTime?

选项2:使用DateTime.MinValue

就我个人而言,我更喜欢选项1。

string是字符的序列。因此,有一个空的string是有意义的,它只是一个空字符序列。

但是DateTime只是一个值,所以谈论"空"的DateTime是没有意义的。

如果你想表示"无值"的概念,它在.Net中表示为null。如果你想将其与值类型一起使用,你需要显式地使它们可以为null。这意味着要么使用Nullable<DateTime>,要么使用等效的DateTime?

DateTime(就像所有值类型一样)也有一个默认值,它被分配给未初始化的字段,您也可以通过new DateTime()default(DateTime)获得它。但您可能不想使用它,因为它表示有效日期:1.1.0001 0:00:00。

没有空日期这回事,你的意思是:

DateTime? myDateTime = null;

.addwithvalue需要dbnull。你可以这样做:

DateTime? someDate = null;
//...
if (someDate == null)
    myCommand.Parameters.AddWithValue("@SurgeryDate", DBnull.value);

或者使用方法扩展。。。

  public static class Extensions
    {
        public static SqlParameter AddWithNullValue(this SqlParameterCollection collection, string parameterName, object value)
        {
            if (value == null)
                return collection.AddWithValue(parameterName, DBNull.Value);
            else
                return collection.AddWithValue(parameterName, value);
        }
    }

这将适用于空日期时间参数

SearchUsingDate(DateTime? StartDate, DateTime? EndDate){
     DateTime LastDate;
     if (EndDate != null)
       {
          LastDate = (DateTime)EndDate;
          LastDate = LastDate.AddDays(1);
          EndDate = LastDate;
        }
}