You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell CSV转换因系统DateTime格式不匹配报错及格式固定需求

解决方案

根因说明

  • 之前的错误是将日期格式字符串错写为CSV的属性名,导致读取到null值触发空参数报错
  • 选择了错误的区域信息(es-ES为西班牙区域,无法解析美国格式的AM/PM标识与月/日/年排列顺序)
  • 未明确指定输入日期的匹配格式,解析逻辑依赖系统默认格式

完整修改后代码段

…
$data = $csvData | ? {$_ -match "\(DTRE"}

$dtreFileData = New-Object System.Collections.Generic.List[PSCustomObject]
# 定义美国区域信息,匹配源数据的日期格式规则
$usCulture = [System.Globalization.CultureInfo]::GetCultureInfo("en-US")
# 定义源数据的输入日期格式
$inputFormat = "MM/dd/yy, h:mm tt"
# 定义需要的输出日期格式
$outputFormat = "dd-MMM-yyyy hh:mm tt"

foreach ($item in $data)
{
  $null = $item.Strategy -match "\(DTRE\|(.*)\)"
  $v = $Matches[1] -split '\|'

  $resultvalue = $v[0] | Convert-CurrencyStringToDecimal
  $expectedvalue = $v[1] | Convert-CurrencyStringToDecimal

  $dtreData = [PSCustomObject]@{
    # 按固定规则解析源日期,完全不受系统区域影响
    'DateTime' = [datetime]::ParseExact($item.'Date/Time', $inputFormat, $usCulture).ToString($outputFormat)
    'ResultValue' = [decimal]$resultvalue
    'ExpectedValue' = [decimal]$expectedvalue
    }
  
  $null = $dtreFileData.Add($dtreData)
  $null = $dtreAllData.Add($dtreData)
}

$dtreFileData | Export-Csv -Path (Join-Path (Split-Path -Path $f -Parent) ($outFile + '.csv')) -Force -NoTypeInformation -Encoding ASCII
…

关键修改说明

  • 明确指定en-US区域解析源数据,完全匹配美国日期的AM/PM标识、月/日/年排列规则
  • ParseExact参数顺序正确:第一个参数为读取到的原始日期字符串$item.'Date/Time',第二个为输入格式串,第三个为区域信息,避免空值报错
  • 解析完成后直接格式化为需要的dd-MMM-yyyy hh:mm tt格式再存入对象,导出CSV时不会受系统日期格式影响,输出结果固定

内容的提问来源于stack exchange,提问作者adiario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:24:08