【问题标题】:Trying to convert array of strings to date试图将字符串数组转换为日期
【发布时间】:2023-03-07 14:49:02
【问题描述】:

我遇到了一个奇怪的问题,我试图解析以下字符串的数组,这些字符串已被赋予变量$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

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

【问题讨论】:

    标签: powershell datetime date-formatting datetime-parsing


    【解决方案1】:

    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中徘徊。

    【讨论】:

    • 看来我的评论在提交编辑后被删除了。是的,$ErrorActionPreference 设置为“SilentlyContinue”是正确的。实际的脚本使用 API 来获取可能包含或不包含日期字符串的事件,因此我遇到了很多错误。将 stdout/stderr 打印到 Ansible playbook 运行时并不理想。再次感谢!
    【解决方案2】:

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

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

    完整代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 2018-04-13
      • 1970-01-01
      • 2020-06-27
      • 2015-04-27
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多