我有一个带有DateTime变量的输出数据类。我想在加载器类中将其清除为空值,但编译器会抱怨:
无法将null转换为'System.Data.Time',因为它是一个不可为空的值类型。
我理解,但如果我将类型更改为DateTime?创建可以为空的类型包装器我得到:
方法'ToString'没有重载需要'1'参数
我有一个读取的输出行。
ACCOUNT_ESTABLISHED_DATE.ToString( “YYYY-MM-DD”)
所以问题是,当我将DateTime设置为可空时,如何解决不再像具有格式化ToString的DateTime那样的事实?
答案 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?
答案 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");