我知道以自定义格式显示DateTime
的标准程序,如下所示:
MessageBox.Show(dateSent.ToString("dd/MM/yyyy hh:mm:ss"));
但是,当我将变量从DateTime
更改为DateTime?
以接受空值时,我将失去ToString(string)
重载的定义。当我从一个可能具有空值的数据库中读取时,我需要使用DateTime?
- 如果数据库中的字段具有空值,那么我也需要为变量赋值空值。
所以我有两个问题:
1)出于好奇,是否有人知道DateTime?
是否包含ToString(string)
重载的原因?
2)有人可以为我想要实现的目标提出另一种方法吗?
答案 0 :(得分:11)
DateTime?
是Nullable<DateTime>
的语法糖,这就是它没有ToString(format)
重载的原因。
但是,您可以使用DateTime
属性访问基础Value
结构。但在此之前使用HasValue
检查,如果值存在。
MessageBox.Show(dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty)
答案 1 :(得分:6)
您不必每次都手动执行空检查,而是可以编写扩展方法。
public static string ToStringFormat(this DateTime? dt, string format)
{
if(dt.HasValue)
return dt.Value.ToString(format);
else
return "";
}
并像这样使用它(使用你想要的任何字符串格式)
Console.WriteLine(myNullableDateTime.ToStringFormat("dd/MM/yyyy hh:mm:ss"));
答案 2 :(得分:1)
您仍然可以使用
variableName.Value.ToString(customFormat);