【问题标题】:converting date from given string从给定字符串转换日期
【发布时间】:2016-02-12 16:52:58
【问题描述】:

我需要识别这个包含日期的字符串

20151110171937.050162+060

它是对象Get-WmiObject -Class win32_processCreationDate 属性。我需要将它用作New-TimeSpan cmdlet 的输入。因此,它应该是有效的[DateTime] 对象,但我不知道如何转换它。

【问题讨论】:

  • 尝试投射 [System.DateTime]
  • Get-WmiObject -Class win32_process|ForEach-Object {$_.ConvertToDateTime($_.CreationDate)}

标签: string powershell datetime


【解决方案1】:

PowerShell 使用 ConvertFromDateTimeConvertToDateTime 两种方法扩展每个 WMI 对象,这允许您在 WMI 字符串和 .NET [DateTime] 表示之间转换日期和时间。这些方法实际上只是对[System.Management.ManagementDateTimeConverter] 静态方法ToDmtfDateTimeToDateTime 的引用。

【讨论】:

  • 像魅力一样工作。谢谢你:-)。
【解决方案2】:

小数点前的部分为“20151110171937”

或 2015-11-10 17:19:37

这是您的日期/时间戳。其余的忽略。

【讨论】:

  • “我需要将它用作 New-TimeSpan cmdlet 的输入”您似乎不符合 OP 的要求:)
【解决方案3】:

字符串 "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 才能使其工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多