首页 > 解决方案 > 将字符串转换为时间跨度以便对从 CSV 导入的列求和的问题

问题描述

我想用我的工作时间导入一个 CSV 文件。格式如下:

说明;开始时间;结束时间;持续时间;日期

当我导入 CSV 时,每个对象都作为字符串导入。我尝试将 colmn 'Duration' 转换为 [timespan] 以便对这一列求和。这不起作用。

$import = Import-Csv -Path "C:\admin\test3\tst_tasks_Mai-2019.csv" -Delimiter ";" |
          Sort-Object -Top 15
$sort_description = $import | Sort-Object {$_.Description}
$set_dateformat = $sort_description | ForEach-Object {
    $_.Duration = [timespan]$_.Duration
}

错误信息:

无法将“System.Object[]”类型的“System.Object[]”值转换为“System.TimeSpan”类型

标签: powershellpowershell-v6.0

解决方案


基于文化的时间和日期有许多不同的格式,有很多可能的歧义位置......一个字符串并不总是(甚至经常)映射到一个时间跨度。因此,仅仅通过[timespan]. 您必须解析字符串。

你可以试试这个,但我不确定你是否还需要做其他事情来创建你所追求的数据项目,或者使用Parse()允许你更精确地了解预期格式的重载:

 $_.Duration = System.TimeSpan::Parse($_.Duration)

推荐阅读