【问题标题】:Remove Time from DateTime从 DateTime 中删除时间
【发布时间】:2018-04-13 08:08:49
【问题描述】:

我有一个DataTable,它从SQL 检索DateTime。但是,我想在我的textbox 中显示 date only。我尝试转换但编译时错误一直说

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

txtexpiry.Text = dtbl.Rows[0]["Safetyexpirydate"].ToString("dd/MM/yyy");

【问题讨论】:

  • 如果您在dtbl.Rows[0]["Safetyexpirydate"] 上进行调试并快速查看,假设您使用的是Visual Studio,您将看到它的类型为object 而不是DateTime

标签: c# date datetime web-applications


【解决方案1】:

dtbl.Rows[0]["Safetyexpirydate"] 返回object,并且没有那种过载。 DateTime 可以,所以你必须将对象转换为DateTime

txtexpiry.Text = ((DateTime)dtbl.Rows[0]["Safetyexpirydate"]).ToString("dd/MM/yyy");

如果对象可以是null,你必须先检查一下。在这种情况下,最简单的方法是使用is

 object o = dtbl.Rows[0]["Safetyexpirydate"];

 if (o is DateTime d)
 {
     txtexpiry.Text = d.ToString("dd/MM/yyy");
 }

【讨论】:

  • 旁注:o is DateTime d 片段(模式匹配)需要 C# 7.0
  • 取决于框架版本dtbl.Rows[0].Field<DateTime>("Safetyexpirydate").ToString("dd/MM/yyy");
【解决方案2】:

你应该Convert它,当你得到DateTime而不是Object时需要调用ToString()

txtexpiry.Text = Convert
  .ToDateTime(dtbl.Rows[0]["Safetyexpirydate"]) // we have DateTime
  .ToString("dd/MM/yyy");                       // which we represent as "dd/MM/yyy" 

【讨论】:

  • 如果存储为日期,则无需转换,只需转换。
【解决方案3】:
txtexpiry.Text = String.Format("{0:dd/MM/yyyy}", dtbl.Rows[0]["Safetyexpirydate"]);

【讨论】:

    【解决方案4】:

    在进行类型转换之前,将数据行对象转换为DateTime 并使用简单的ternary (?) 运算符检查对象的non-null 条件。

    txtexpiry.Text = dtbl.Rows[0]["Safetyexpirydate"] != null 
      ? ((DateTime)dtbl.Rows[0]["Safetyexpirydate"]).ToString("dd/MM/yyy")
      : "";
    

    【讨论】:

      【解决方案5】:

      假设 Safetyexpirydate 已经是 DateTime 类型:

      txtexpiry.Text = ((DateTime) dtbl.Rows[0]["Safetyexpirydate"]).Date
      

      【讨论】:

      • 那个在putToString的时候还是会打印时间段。
      • @PatrickHofman 不,日期将返回没有时间的日期部分,就像询问操作一样
      • 不,它将创建一个新的DateTime,并将时间段重置为0
      • @PatrickHofman 如您所愿,但不会像您在第一条评论中所说的那样随时打印。
      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 2013-07-15
      • 2014-09-07
      • 2018-12-20
      • 2011-06-07
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多