使用DateTime

时间:2016-03-17 08:34:08

标签: c# asp.net datetime

我有DataTable,其中一列是DataStart, typeof(DateTime)。 我尝试再添加一列,我计算一些日期。 像那样:

DataColumn Deadline = table.Columns.Add("Deadline", typeof(DateTime));
foreach (DataRow row in table.Rows)
{
  row["Deadline"] = DataTime.Now.AddDays(10) - (DateTime)(row["DateStart"]);
}

但是我在运行应用程序时遇到了一些错误:

  

无法将类型为“System.TimeSpan”的对象强制转换为类型   'System.IConvertible'。不能存储< 13.10:32:02.3571743>在截止日期   柱。预期类型是DateTime。

我该如何解决?

3 个答案:

答案 0 :(得分:2)

如果您添加或减去两个日期时间,则结果为TimeSpan,这是两者之间的跨度。你想从DateStart时间减去10天,不是吗?使用DateTime.TimeOfDay

row["Deadline"] = DateTime.Today.AddDays(10) + row.Field<DateTime>("DateStart").TimeOfDay;

DateTime + TimeSpan的结果是DateTime。请注意,我还使用DateTime.Today.AddDays(10)代替DateTime.Now.AddDays(10)来截断时间部分。

答案 1 :(得分:2)

您可以更改以下内容:

row["Deadline"] = DataTime.Now.AddDays(10) - (DateTime)(row["DateStart"]);

要:

row["Deadline"] = ((DateTime)(row["DateStart"])).AddDays(10);

这将创建一个新日期,比DateStart值提前10天。目前,您正在尝试使用引发异常的Deadline来设置DateTime TimeSpan值。

答案 2 :(得分:1)

因为DateTime.Now.AddDays(10) - (DateTime)(row["DateStart"])返回TimeSpan,而不是DateTime

如果您想在DeadLine列上保留时间间隔,您可能希望更改其类型;

DataColumn Deadline = table.Columns.Add("Deadline", typeof(TimeSpan));

如果您希望在10的时间DateStartrow["Deadline"] = DataTime.Today.AddDays(10) + (DateTime)(row["DateStart"]).TimeOfDay; 天,可以使用TimeOfDay property之类的;

:sdate