尝试将字符串数组转换为日期

时间:2020-02-29 04:44:27

标签: powershell datetime date-formatting datetime-parsing

我遇到一个奇怪的问题,我试图解析以下字符串数组,这些字符串已被赋予变量new_json.sessions[0] = { timing: []}

$DatesUnformatted

...使用2020-02-28T05:29:00Z 2020-02-28T04:52:00Z 2020-02-28T04:52:00Z 2020-02-27T17:01:00Z 2020-02-27T17:01:00Z 2020-02-27T17:01:00Z 2020-02-27T17:01:00Z 转换为时间格式(hh:mm tt)。

我的脚本看起来像这样:

[DateTime]::ParseExact()

这是输出:

foreach ($DateUnformatted in $DatesUnformatted)
{
    $DateFormatted = [datetime]::parseexact($DateUnformatted, 'yyyy-MM-ddThh:mm:ssZ',$null).ToString('hh:mm tt')
    echo "Converting $DateUnformatted to $DateFormatted"
}

似乎只转换前几个条目,然后重复一个直到循环结束。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

hh仅适用于 12 小时格式(带有AM / PM指示符),而您的输入使用 24小时格式,对于必须使用HH

[datetime]::ParseExact(
  $DateUnformatted, 
  'yyyy-MM-ddTHH:mm:ssZ', # note the 'HH'
  $null
).ToString('hh:mm tt')

您的症状暗示$ErrorActionPreference = 'SilentlyContinue'有效,否则您会看到ParseExact()方法大声触发其语句终止错误,并显示以下错误消息:

Exception calling "ParseExact" with "3" argument(s): "String '2020-02-27T17:01:00Z' was not recognized as a valid DateTime."

无论哪种方式,最后一次成功调用的结果都将保留在变量$DateFormatted中。

答案 1 :(得分:0)

您还可以像这样将字符串隐式转换为数据时间:

([datetime]'2020-02-28T04:52:00Z').ToString('hh:mm tt')

完整代码:

$DatesUnformatted | foreach { "Converting $_ to " + ([datetime]$_).ToString('hh:mm tt') }