我正在检索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值,但我根本无法解析它,我真的不在乎毫秒。 最佳答案
将格式字符串设置为yyyyMMddHHmmss
。 hh
适用于12小时制,HH
适用于24小时制。参见here。
关于.net - Powershell ParseExact()军事时间Convert-DateTime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17753445/