【问题标题】:C# newbie with DateTime variable I want to set to null带有 DateTime 变量的 C# 新手,我想将其设置为 null
【发布时间】:2009-10-15 16:12:26
【问题描述】:

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

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

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

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

我有一个输出行。

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

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

【问题讨论】:

    标签: c# .net datetime nullable


    【解决方案1】:

    使用它的 Value 属性,如下所示:

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

    【讨论】:

    • 记得考虑dt.HasValue == false的可能性
    • 在 Java 中要容易得多。但是谢谢,我确实使用了 ACCOUNT_ESTABLISHED_DATE == null ? " " : ACCOUNT_ESTABLISHED_DATE.Value.ToString("yyyy-MM-dd") 解决问题
    【解决方案2】:

    试试

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

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

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

    HTH

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你应该写:

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

        【讨论】:

          【解决方案5】:

          .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】:

            你在找吗

            DateTime? dt = new DateTime();
            

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

            【讨论】:

              【解决方案7】:

              你必须使用

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

              这是因为Nullable&lt;T&gt; 本身就是一个正确的类型,它的ToString() 方法已经很好地完成了,因为它很好地处理了null 的情况。但是要访问底层的不可为空的对象,您必须使用 Value 属性。但是你必须自己检查null(或HasValue)。

              【讨论】:

                【解决方案8】:

                您是否考虑过将 DateTime 设置为 DataTime.MinValue?

                这里推荐http://dotnetperls.com/datetime-null-minvalue

                【讨论】:

                  【解决方案9】:
                  DateTime? date = getSomeDate();
                  if (date != null) {
                     date.Value.ToString("yyyy-MM-dd");
                  }
                  

                  【讨论】:

                    【解决方案10】:
                      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");
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2017-04-04
                      • 1970-01-01
                      • 2021-01-15
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多