首页 文章

Powershell - 将日期格式修改为CSV列中的值

提问于
浏览
0

我正在寻找以下的PowerShell脚本......

我有一个自动从网站下载的CSV电子表格,电子表格的第二列是英国格式的日期值dd / mm / yyyy . 我想要一个脚本,它将第2列中所有值的日期格式更改为美国日期格式yyyy / mm / dd .

我正在使用LOAD DATA INFILE将CSV导入MySQL数据库,目前日期是2017/02/15,应该是2015/02/17 .

CSV文件格式的示例如下......

Col1,Col2,Col3,Col4
Value1,17/02/15,Value3,Value4
Value1,18/02/15,Value3,Value4
Value1,19/02/15,Value3,Value4

我需要它成为......

Col1,Col2,Col3,Col4
Value1,2015-02-17,Value3,Value4
Value1,2015-02-18,Value3,Value4
Value1,2015-02-19,Value3,Value4

2 回答

  • 1

    一种方式可能是(将英国格式的所有日期替换为美国格式,无论列如何):

    (get-content c:\file.csv) -replace "(\d{2})\/(\d{2})\/(\d{4})", '$3/$2/$1'
    

    如果要将结果管道保存到set-content:

    (get-content c:\file.csv) -replace "(\d{2})\/(\d{2})\/(\d{4})", '$3/$2/$1'  |sc c:\file.csv
    
  • 1

    我喜欢用TryParseExact . 您可以转换多种格式,并且可以找到无效值 .

    例:

    $dateString = "17/02/2015"
    
    $format = "dd/MM/yyyy"
    [ref]$parsedDate = get-date
    $parsed = [DateTime]::TryParseExact($dateString, $format,[System.Globalization.CultureInfo]::InvariantCulture,[System.Globalization.DateTimeStyles]::None,$parseddate)
    
    $parsedDate.Value.ToString("yyyy/MM/dd")
    

相关问题