C#newbie with DateTime变量我想设置为null

时间:2009-10-15 16:12:26

标签: c# .net datetime nullable

我有一个带有DateTime变量的输出数据类。我想在加载器类中将其清除为空值,但编译器会抱怨:

  

无法将null转换为'System.Data.Time',因为它是一个不可为空的值类型。

我理解,但如果我将类型更改为DateTime?创建可以为空的类型包装器我得到:

  

方法'ToString'没有重载需要'1'参数

我有一个读取的输出行。

  

ACCOUNT_ESTABLISHED_DATE.ToString( “YYYY-MM-DD”)

所以问题是,当我将DateTime设置为可空时,如何解决不再像具有格式化ToString的DateTime那样的事实?

10 个答案:

答案 0 :(得分:7)

使用其Value属性,如下所示:

DateTime? dt = DateTime.Now; // or whatever
MessageBox.Show(dt.Value.ToString(...));

答案 1 :(得分:2)

ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd")

您需要使用可空类型的“Value”属性访问实际值。

您应该确保'Value'包含首先测试ACCOUNT_ESTABLISHED_DATE.HasValue属性的内容。

HTH

答案 2 :(得分:1)

每当你包装一些Nullable<>(这是你在使用DateTime?时所做的事情)时,你需要obj.Value.ToString()

答案 3 :(得分:1)

你正在寻找

吗?
DateTime? dt = new DateTime();

Nullable<DateTime> dt = new DateTime();
ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd");

答案 4 :(得分:1)

你应该写:

ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd")

答案 5 :(得分:1)

.NET没有开箱即用的方法。您需要一个辅助方法,如:

public string Format(DateTime? date, string format)
{
    if (date == null)
        return string.Empty;

    return date.Value.ToString(format);
}

甚至更好,DateTime?的扩展方法:

public static class DateTimeExtensionMethods
{
    public static string ToString(this DateTime? date, string format)
    {
        if (date == null)
            return string.Empty;

        return date.Value.ToString(format);
    }
}

然后,要使用您的扩展方法,只需使用您问题中的代码,并确保DateTimeExtensionMethods的命名空间已导入您的班级。

答案 6 :(得分:0)

你必须使用

dt.HasValue ? dt.Value.ToString("...") : dt.ToString();

这是因为Nullable<T>本身就是一个合适的类型,其ToString()方法已经很好地完成了,因为它很好地处理了null个案。但是要获取底层的非可空对象,您必须使用Value属性。但是,您必须自己检查null(或HasValue)。

答案 7 :(得分:0)

DateTime? date = getSomeDate();
if (date != null) {
   date.Value.ToString("yyyy-MM-dd");
}

答案 8 :(得分:0)

您是否看过将DateTime设置为DateTime.MinValue?

此处建议http://dotnetperls.com/datetime-null-minvalue

答案 9 :(得分:0)

  string strDate = string.Empty;
  if(ACCOUNT_ESTABLISHED_DATE != null)
  {
  strDate = ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd");
 }

  or you can use null collacing operator

  DateTime newDate  = ACCOUNT_ESTABLISHED_DATE ?? new Date();

   newDate.ToString("yyyy-MM-dd");