日期转换 yyyymmddhhmm+000

Date conversion yyyymmddhhmm+000

我试图通过 Powershell 从 WMI 中获取 SCCM MP 的详细信息。 事情是我可以从 WMI 获取的数据,但日期格式不同,我无法转换。可能是知识欠缺

$query = Get-WmiObject -Query "SELECT * FROM SMS_MPInformation " -Namespace root\ccm\LocationServices -ComputerName "test_vm"

$MP = $query.MP
$Sitecode = $query.SiteCode
$MPLastRequestTime = $query.MPLastRequestTime
$MPLastUpdateTime = $query.MPLastUpdateTime

我得到的输出没有问题,但日期格式有点不同。

$MPLastRequestTime = 20191008000158.927000+000

其实应该是这样的。

MPLastRequestTime:2019 年 10 月 8 日00:01

任何人都可以告诉我如何将其转换为上述格式。 WMIExplorer 工具可以转换它,所以我知道一定有办法。

尝试使用 Get-CimInstance-Wmi cmdlet 的贬值从未减少,CIM 应该 return DateTime 的格式更易读。

除了 Ivan Mirchev 的有用答案。您可以像这样转换 WMI 时间戳:

$wmiTime = '20191008000158.927000+000'
$date = [DateTime]::new((([wmi]"").ConvertToDateTime($wmiTime)).Ticks, 'Local')

如果您需要 UTC 日期,请执行

$wmiTime = '20191008000158.927000+000'
$date = [DateTime]::new((([wmi]"").ConvertToDateTime($wmiTime)).Ticks, 'Local').ToUniversalTime()

后者会输出

08-Oct-2019 00:01:58

解释:

虽然WMI时间戳是UTC时间,ConvertToDateTime()函数returns日期在当地时间,可惜留下了Kind 属性 设置为 'Unspecified'。

当您对其执行 ToLocalTime() 时,该方法会 assumes it's UTC 并再次添加时区偏移,导致时间错误。

因为 .Kind 属性 在 DateTime 对象上是只读的,您需要使用转换后的 WMI 时间创建一个新的 DateTime,以便将其 Kind 属性 设置为'Local'.