日期转换 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'.
我试图通过 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'.