Powershell,以不同格式导入的csv日期

时间:2020-09-08 12:27:03

标签: excel powershell csv date import

我想将这种csv导入Excel

工作项类型,ID,状态,日期请求,创建日期
“任务”,“ 4533”,“已关闭”,“ 2-9-2020 14:26:00”,“ 3-9-2020 08:17:39”
“任务”,“ 4535”,“已关闭”,“ 3-9-2020 12:26:44”,“ 3-9-2020 12:29:33”
“任务”,“ 4577”,“已关闭”,“ 3-9-2020 15:56:00”,“ 4-9-2020 09:12:21”
“任务”,“ 4580”,“新”,“ 17-8-2020 09:47:00”,“ 4-9-2020 09:49:39”
“任务”,“ 4581”,“已解决”,“ 28-8-2020 10:22:00”,“ 4-9-2020 10:24:46”
“任务”,“ 4582”,“已解决”,“ 24-8-2020 10:05:00”,“ 4-9-2020 10:31:12”
“任务”,“ 4604”,“已解决”,“ 8-9-2020 08:06:58”,“ 8-9-2020 08:07:23”
“任务”,“ 4605”,“已解决”,“ 8-9-2020 09:18:32”,“ 8-9-2020 09:18:58”

此示例中的所有日期都必须以日-月-年小时:分钟:秒的格式显示

我这样导入:

    Import-Csv -Path '.\Issues.csv' | ForEach-Object {

    $sheet1.Cells.Item(1,1) = 'ID'
    $sheet1.Cells.Item(1,2) = 'Status'
    $sheet1.Cells.Item(1,3) = 'Date Request'
    $sheet1.Cells.Item(1,4) = 'Date Created'

    $DateRequest = ([datetime]::ParseExact(($($_."Date Request")),$fmtDate,$inv).ToString($fmtDate))

    $sheet1.Cells.Item($row,1) = $($_.ID)
    $sheet1.Cells.Item($row,2) = $($_.State)
    $sheet1.Cells.Item($row,3) = $($_."Date Request")
    $sheet1.Cells.Item($row,4) = $($_."Created Date")

    $row = $row + 1

}

我导入的结果

ID      Status      Date Request          Date Created
4533    Closed      9/02/2020 14:26       9/03/2020 8:17
4535    Closed      9/03/2020 12:26       9/03/2020 12:29
4577    Closed      9/03/2020 15:56       9/04/2020 9:12
4580    New         17-8-2020 09:47:00    9/04/2020 9:49
4581    Resolved    28-8-2020 10:22:00    9/04/2020 10:24
4582    Resolved    24-8-2020 10:05:00    9/04/2020 10:31
4604    Resolved    9/08/2020 8:06        9/08/2020 8:07
4605    Resolved    9/08/2020 9:18        9/08/2020 9:18

如您所见,CSV中的某些日期以月日日年格式显示为红色, 其他为红色,带有日-月-年格式。 日期9月3日已变成3月9日

我尝试使用CultureInfo,但没有成功。

    $inv = [System.Globalization.CultureInfo]::InvariantCulture<br>
    $fmtDate = "dd/MM/YYYY HH:mm:ss"
    
    $DateRequest = ([datetime]::ParseExact(($($_."Date Request")),$fmtDate,$inv).ToString($fmtDate))

有人对解决这个问题有何建议?

2 个答案:

答案 0 :(得分:2)

首先,CSV文件中的日期采用d-M-yyyy HH:mm:ss格式(yyyy用小写字母,并且字段中的日期和月份没有前导零)。

尝试

$fmtDate = "d-M-yyyy HH:mm:ss"

让我感到困惑的是为什么您要首先在csv中解析日期,然后使用ToString()将其重新格式化为完全相同的字符串格式。

按以下步骤起飞.ToString($fmtDate)

$DateRequest = [datetime]::ParseExact($_."Date Request",$fmtDate, $inv)

并将该DateTime对象送入Excel单元格

答案 1 :(得分:1)

dd/MM/YYYY HH:mm:ss没有描述您输入的日期格式-ddMM分别是日期和月份数字前导零

使用:

$fmtDateInput = 'd-M-yyyy HH:mm:ss'
$fmtDateOutput = "dd/MM/yyyy HH:mm:ss"

[datetime]::ParseExact($dateString, $fmtDateInput, $culture).ToString($fmtDateOutput)
相关问题