【问题标题】:ParseExact doesn't recognize "Mdyyyy" formatParseExact 无法识别“Mdyyyy”格式
【发布时间】:2021-08-18 19:06:24
【问题描述】:

我的日期字符串如下所示:'812021'。 (那是 2021 年 8 月 1 日)

这是“Mdyyyy”格式,我已经用the documentation 仔细检查过。

  • M --> 月份,无前导零,1-12
  • d --> 日期,无前导 零,1-31
  • yyyy --> 4 位年份

但是,当我尝试 ParseExact() 时,如果我没有提供前导零,则会收到错误消息。不幸的是,源内容不会有前导零。

为什么我的日期格式不起作用? Mdyyyy?

[DateTime]::ParseExact('812021', 'Mdyyyy', [CultureInfo]::InvariantCulture)

<#
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
At line:18 char:1
+ [DateTime]::ParseExact('812021', 'Mdyyyy', [CultureInfo]::InvariantCu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException
#>
[DateTime]::ParseExact('08012021', 'Mdyyyy', [CultureInfo]::InvariantCulture)

# Sunday, August 1, 2021 12:00:00 AM

更新 -- 其他示例

2021 年 8 月 1 日下午 4:01:31 MdyyyyHms

失败:

[DateTime]::ParseExact('812021160132', 'MdyyyyHms',[CultureInfo]::InvariantCulture)

不会失败:

[DateTime]::ParseExact('08012021160132', 'MdyyyyHms', [CultureInfo]::InvariantCulture)

【问题讨论】:

  • 好的。您如何区分 12 月 1 日和 1 月 21 日? ;-) ...两者都是1212021 ...我认为您需要在月份和日期之间使用分隔符
  • 1212021 好点!你不能用这种格式。完整的实际格式为MddyyyyHms。供应商在文件名中有所有日期。我正在尝试查找和删除早于特定日期的项目。我需要多考虑一下。
  • 这意味着天有前导零...
  • 你说得对,没有前导零——对于月份或日期......我正在用另外两个完整格式的例子来更新它。
  • 我认为您至少需要前导零作为日期或月份和日期之间的分隔符。

标签: powershell


【解决方案1】:

在等待供应商更改前缀时,您可以自己更正这些日期字符串:

$dateStamp = '812021'
$date = if ($dateStamp -match '\d{6}') { 
            '0{0}0{1}' -f ($dateStamp -split '^(.)' -ne '')
            # or something like: '0{0}0{1}' -f $dateStamp.Substring(0,1), $dateStamp.Substring(1) 
        }
        else { $dateStamp }
[DateTime]::ParseExact($date, 'MMddyyyy', [CultureInfo]::InvariantCulture)

【讨论】:

  • 如果检测到特定模式,我喜欢提取特定数字的建议 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 2020-05-24
  • 2018-03-21
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多