我有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。
我该如何解决?
答案 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
的时间DateStart
天row["Deadline"] = DataTime.Today.AddDays(10) + (DateTime)(row["DateStart"]).TimeOfDay;
天,可以使用TimeOfDay
property之类的;
:sdate