从给定字符串转换日期

时间:2015-11-11 14:58:01

标签: string powershell datetime

我需要识别包含Date

的字符串
  

20151110171937.050162 + 060

对象CreationDate的{​​{1}}属性。我需要将它用作Get-WmiObject -Class win32_process cmdlet的输入。因此,它应该是有效的New-TimeSpan对象,但我不知道如何转换它。

3 个答案:

答案 0 :(得分:4)

PowerShell使用两种方法clock = '00:48:22' clock.split(':').map(&:to_i).reduce(0) do |acc, segment| acc * 60 + segment end ConvertFromDateTime扩展每个WMI对象,这允许您在WMI字符串和.NET ConvertToDateTime表示之间转换日期和时间。这种方法实际上只是对[DateTime]静态方法[System.Management.ManagementDateTimeConverter]ToDmtfDateTime的引用。

答案 1 :(得分:0)

小数点前的部分是" 20151110171937"

或2015-11-10 17:19:37

您的日期/时间戳。忽略其余部分。

答案 2 :(得分:0)

字符串" 20151110171937.050162 + 060"是WMI日期时间格式,与CIM_DATETIME数据类型等效,格式如下(yyyymmddHHMMSS.mmmmmmsUUU)其中;

  • mmmmmm秒中的六位数微秒(000000到 999999)。您的实施不必支持评估 使用此字段。但是,必须始终存在此字段 保留字符串的固定长度性质。

  • s加号(+)或减号( - )表示正面或负面 偏离世界协调时间(UTC)。

  • UUU三位数偏移量 表示始发时区的分钟数 偏离UTC。对于WMI,鼓励但不要求 将时间转换为GMT(UTC偏移为零)。

UUU具有重要意义,因为它确实会改变您当地的时区。您可以通过更改本地时区并运行来测试,例如

(Get-WmiObject Win32_OperatingSystem).InstallDate

您可以使用PeterSerAl提及或通过此快捷方式隐藏一次性

([WMI]'').ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).InstallDate)

但请注意,Powershell中的ConvertToDateTime()和[System.Management.ManagementDateTimeConverter] :: ToDateTime()存在错误,它不尊重本地时区,会给你错误的日期。分析here,但是这很短很长,你必须重新启动Powershell shell或ISE才能使其正常工作