我有一个数据表,其中一列"持续时间"是以秒为单位的时间。我添加了一个表达式列,并希望用它来显示持续时间(s)列,但格式为hh:mm:ss。 msdn文档here表明可以使用TimeSpan作为支持函数。
接受以下表达式,但在尝试计算时会生成错误
(错误是:System.Data.dll中出现类型' System.Data.EvaluateException'未处理的异常 - 附加信息:无效的类型名称' TimeSpan.FromSeconds([Duration(s) )])'。)
Convert([Duration(s)], 'TimeSpan.FromSeconds([Duration(s)])')
有没有人有一个如何在DataColumn表达式中正确使用TimeSpan的工作示例,因为我没有找到任何在线任何运气(目前我正在创建一个新列并循环遍历每一行并创建hh: mm:ss列就是这样,但这样有点乱。)我认为我的错误是时间跨度的错误使用和持续时间(s)是int32的事实的组合,并且msdn doc建议在这种情况下TimeSpan只能在字符串之间工作。
我使用的是VS2013,目标框架是4.0。
答案 0 :(得分:0)
试试这个:
TimeSpan.FromSeconds([Duration(s)]).Hours.ToString.PadLeft(2, "0"c) & ":" & _
TimeSpan.FromSeconds([Duration(s)]).Minutes.ToString.PadLeft(2, "0"c) & ":" & _
TimeSpan.FromSeconds([Duration(s)]).Seconds.ToString.PadLeft(2, "0"c)
答案 1 :(得分:0)
CONVERT函数需要Type作为第二个参数。你不能在那里使用methid。此外,要使用TimeSpan类型的DataColumn的Expression属性的CONVERT函数,您需要使用TimeSpan类型创建表达式列。
此时,您可以使用CONVERT函数。唯一要记住的是转换期望转换的值的每个单位表示为100纳秒。
所以你可以尝试这种方法
Dim nsec100 as Long = 10000000
Dim ts = new TimeSpan(nsec100)
Console.WriteLine("Total Seconds from 10000000 100ns = " & ts.TotalSeconds)
Dim dt = new DataTable()
dt.Columns.Add("SEC", Type.GetType("System.Int64"))
dt.Columns.Add("TS", Type.GetType("System.TimeSpan"),
"CONVERT(SEC, System.TimeSpan)")
dt.Rows.Add(nsec100)
Console.WriteLine("TimeSpan:" & dt.Rows(0)(1).ToString())
这会产生以下输出
Total Seconds from 10000000 100ns 1
TimeSpan:00:00:01
此时,您可以更改表达式以将秒值乘以10000000
dt.Columns.Add("TS", Type.GetType("System.TimeSpan"),
"CONVERT(SEC * 10000000, System.TimeSpan)")