从两个帧列计算时间跨度

时间:2014-08-13 11:14:04

标签: datetime f# deedle

我有一个带有两列包含DateTime时间戳的deedle框架。 我想计算两者之间的差异(timaspan)

type Test = { 
    id : int;
    start : DateTime;
    finish : DateTime    }

let testData = [
    {id = 1; start = DateTime.Parse("13.01.2014 00:45:38"); finish = DateTime.Parse("13.01.2014 03:15:39")};
    {id = 2; start = DateTime.Parse("15.01.2014 00:30:38"); finish = DateTime.Parse("16.01.2014 01:07:39")}]

let testFrame = Frame.ofRecords testData

testFrame?TimeSpan <- testFrame |> Frame.mapRowValues (fun row -> 
    row?finish - row?start )

1 个答案:

答案 0 :(得分:2)

?中使用row?finish运算符是row.GetAs<float>("finish")的快捷方式,意味着它访问某个列并尝试将其转换为float - 运算符执行此操作仅仅是因为这似乎是最常见的情况,所以我们想让它变得简单。

如果您需要使用其他类型,则需要明确使用GetAs

testFrame?TimeSpan <- testFrame |> Frame.mapRowValues (fun row -> 
    row.GetAs<DateTime>("finish") - row.GetAs<DateTime>("start") )

另请查看此MSDN documentation page,其中讨论了使用DateTimeDateTimeOffset之间的区别,以确保您使用正确的类型来表示时间。