7

我知道DateTime以自定义格式显示 a 的标准过程,如下所示:

MessageBox.Show(dateSent.ToString("dd/MM/yyyy hh:mm:ss"));

但是,当我将变量从 a 更改DateTime为 aDateTime?以接受空值时,我会丢失ToString(string)重载的定义。当我从可能具有空值的数据库中读取数据时,我需要使用DateTime?它 - 如果数据库中的字段具有空值,那么我也需要为变量分配一个空值。

所以我有两个问题:

1)出于好奇,有谁知道是否有理由DateTime?不包含重载 for ToString(string)

2)任何人都可以为我想要实现的目标提出一种替代方法吗?

4

3 回答 3

11

DateTime?是语法糖Nullable<DateTime>,这就是为什么它没有ToString(format)过载。

但是,您可以使用属性访问底层DateTime结构。Value但在此之前用于HasValue检查该值是否存在。

MessageBox.Show(dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty)
于 2013-04-04T10:52:11.770 回答
7

您可以编写一个扩展方法,而不必每次都手动执行空检查。

 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"));
于 2013-04-04T11:00:29.083 回答
1

你仍然可以使用

variableName.Value.ToString(customFormat);
于 2013-04-04T10:52:50.330 回答