尝试将字符串数组转换为日期
Trying to convert array of strings to date
我 运行 遇到了一个奇怪的问题,我试图解析以下字符串的数组,这些字符串已被赋予变量 $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
...使用 [DateTime]::ParseExact()
.
的时间格式 (hh:mm tt
)
我的脚本看起来像这样:
foreach ($DateUnformatted in $DatesUnformatted)
{
$DateFormatted = [datetime]::parseexact($DateUnformatted, 'yyyy-MM-ddThh:mm:ssZ',$null).ToString('hh:mm tt')
echo "Converting $DateUnformatted to $DateFormatted"
}
这是输出:
Converting 2020-02-28T05:29:00Z to 12:29 AM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
它似乎只转换前几个条目然后重复一个直到循环结束。有什么想法吗?
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
.
中徘徊
您也可以像这样将字符串隐式转换为日期时间:
([datetime]'2020-02-28T04:52:00Z').ToString('hh:mm tt')
完整代码:
$DatesUnformatted | foreach { "Converting $_ to " + ([datetime]$_).ToString('hh:mm tt') }
我 运行 遇到了一个奇怪的问题,我试图解析以下字符串的数组,这些字符串已被赋予变量 $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
...使用 [DateTime]::ParseExact()
.
hh:mm tt
)
我的脚本看起来像这样:
foreach ($DateUnformatted in $DatesUnformatted)
{
$DateFormatted = [datetime]::parseexact($DateUnformatted, 'yyyy-MM-ddThh:mm:ssZ',$null).ToString('hh:mm tt')
echo "Converting $DateUnformatted to $DateFormatted"
}
这是输出:
Converting 2020-02-28T05:29:00Z to 12:29 AM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-28T04:52:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
Converting 2020-02-27T17:01:00Z to 11:52 PM
它似乎只转换前几个条目然后重复一个直到循环结束。有什么想法吗?
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
.
您也可以像这样将字符串隐式转换为日期时间:
([datetime]'2020-02-28T04:52:00Z').ToString('hh:mm tt')
完整代码:
$DatesUnformatted | foreach { "Converting $_ to " + ([datetime]$_).ToString('hh:mm tt') }