如何将wmi中返回的时间转化成可识别时间

wmi中获取的时间类似于这种 20230112005430.373878-000

以下代码用户返回操作系统安装时间用来做实验

(gwmi -Query "SELECT * FROM Win32_OperatingSystem").installDate

#20230112005430.373878-000

返回的时间属于Universal Time Coordinate (UTC)根据 官方资料 提供的规则 20230112005430.373878-000可以分解为

  1. 2023年
  2. 01月
  3. 12日
  4. 00时
  5. 54分
  6. 30秒
  7. 373878毫秒
  8. 与GMT(格林威治时间)相差0分钟

GMT与UCT的差别可以查看 这个 知乎问答的高赞评论,简单来说GMT=UTC+0.

我们处在东8区与utc时间相差8小时,直接在小时上加上8小时就得到了我们的时间了。

当然你也可以调用.net类 ManagementDateTimeConverter 的 ToDateTime 方法来用程序进行转换,由于这个方法在.net中属于静态方法所以不用实例化可以使用::直接调用。在powershell中就是:

[System.Management.ManagementDateTimeConverter]::ToDateTime("20230112005430.373878-000")

#Thursday, January 12, 2023 8:54:30 AM

这样会返回一个 System.DateTime 对象与powershell原生命令 Get-Date返回的一致,然后该怎么格式化就怎么格式化吧。

 [官方资料](https://learn.microsoft.com/zh-cn/previous-versions/tn-archive/ee198928(v=technet.10)?redirectedfrom=MSDN)

[这个](https://www.zhihu.com/question/27052407)

[ManagementDateTimeConverter](https://learn.microsoft.com/en-us/dotnet/api/system.management.managementdatetimeconverter?view=netframework-4.8)

[System.DateTime](https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/system-datetime-methods)