VB.net datacolumn.expression - 将秒转换为hh:mm:ss

时间:2015-08-24 20:06:09

标签: vb.net

我有一个数据表,其中一列"持续时间"是以秒为单位的时间。我添加了一个表达式列,并希望用它来显示持续时间(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。

2 个答案:

答案 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)")