我正在检索WMI win32_process信息,并尝试将CreationDate转换为更具可读性的内容

$Header = @("__SERVER","Caption","CommandLine","CreationDate","ProcessID")
$processes = Get-WmiObject win32_process -ComputerName theComputer |? {$_.caption -eq "java.exe"} | select $header
#Format-Date
$processes | % {
        $crdate = $_.CreationDate
        if($crdate -match ".\d*-\d*") {
            $crdate = $crdate -replace $matches[0]," "
            $idate = [System.Int64]$crdate
            $date = [DateTime]::ParseExact($idate,'yyyyMMddhhmmss',$null)
            $_.CreationDate = $date
        }
    }

此功能很好用,但有时会因错误消息而失败:Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
我知道我正在传入一个int,我也尝试将$idate转换为String并将其传入,但是在相同的值上出错。

输入示例:(在ParseExact调用之前的$ idate值)
20130719113954
20130719114700
20130719133000 20130719053000
20130719060001
20130719134000
很明显,此功能仅在12:00之前有效

我的问题是我该如何识别军事时间?在12点之前,这会让我吐出一个很棒的约会日期,看起来像7/19/2013 11:47:00 AM。如果解析不接受军事时间,它将如何精确地知道AM和PM之间的差异?

注意:win32_process最初返回一个20130719133000.137239-240之类的CreationDate值,但我根本无法解析它,我真的不在乎毫秒。

最佳答案

将格式字符串设置为yyyyMMddHHmmsshh适用于12小时制,HH适用于24小时制。参见here

关于.net - Powershell ParseExact()军事时间Convert-DateTime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17753445/

10-13 07:49