我遇到一个奇怪的问题,我试图解析以下字符串数组,这些字符串已被赋予变量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"
}
似乎只转换前几个条目,然后重复一个直到循环结束。有什么想法吗?
答案 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') }