【问题标题】:String to DateTime conversion in PowerShellPowerShell 中的字符串到日期时间的转换
【发布时间】:2015-02-28 18:20:39
【问题描述】:

我正在尝试将文件的时间戳值转换为日期时间以比较两个日期时间差异。

数据将以 24122014_022257 格式提供。我需要将其转换为日期时间,以便我可以比较这些值:

$usdate="24122014_022257"   
$dateParts = $usdate -split "_"   
$final = $dateparts[0] + $dateParts[1]   

我该怎么做?

【问题讨论】:

    标签: string datetime powershell


    【解决方案1】:

    您可以使用 ParseExact 方法:

    [datetime]::ParseExact('24122014_022257','ddMMyyyy_HHmmss',$null)
    
    Wednesday, December 24, 2014 2:22:57 AM
    

    【讨论】:

    • 使用[Globalization.CultureInfo]::InvariantCulture 而不是$null。如果格式字符串有 AM/PM 指示符,而系统的区域设置没有,则后者会引发错误。
    • 如果我要转换使用 AM/PM 说明符的数据,我通常只在格式字符串中添加“tt”说明符。
    • 我认为添加一个选项来处理 AM/PM 指示符中的文化差异对没有该指示符的字符串执行 ParseExact 没有意义。
    • 在我的系统上 `[datetime]::ParseExact('24/12/2014','dd/MM/yyyy',$null)` 引发异常,但 [datetime]::ParseExact('24/12/2014','dd/MM/yyyy',[Globalization.CultureInfo]::InvariantCulture) 工作正常。
    • @miracle173 这很奇怪; [DateTime]::ParseExact('24/12/2014','dd/MM/yyyy',$null) 对我来说很好。
    【解决方案2】:

    ParseExact 会做到这一点。您可以在第二个参数中指定自定义日期时间格式。您可以将第三个参数保留为空,或指定要使用的文化(如果您要导入从具有不同时区的系统生成的文件,这可能很重要)。

    $usdate="24122014_022257"
    [datetime]::ParseExact($usdate,"ddMMyyyy_HHmmss", [System.Globalization.CultureInfo]::CurrentCulture)
    

    【讨论】:

      【解决方案3】:

      获取日期 24122014022257

      2014 年 12 月 24 日星期三凌晨 2:22:57

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        相关资源
        最近更新 更多