没有DateTime.ToString(string)过载

本文关键字:过载 string DateTime ToString 没有 | 更新日期: 2023-09-27 18:07:18

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

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

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

我有两个问题:

1)出于好奇,有谁知道DateTime?不包含ToString(string)的过载的原因吗?

2)谁能建议一种替代方法来实现我想要达到的目标?

没有DateTime.ToString(string)过载

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

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

MessageBox.Show(dateSent.HasValue ? dateSent.Value.ToString("dd/MM/yyyy hh:mm:ss") : string.Empty)

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

 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"));

你仍然可以使用

variableName.Value.ToString(customFormat);