在PowerShell中转换日期时间格式

时间:2015-08-04 11:38:05

标签: powershell powershell-v2.0 powershell-v3.0

如何将以下日期转换为dd / mm / yyyy格式?

Tue Aug  4 17:05:41 2015

我尝试过多种方法和选择,但没有运气。

$a = Get-Date -UFormat %c
(Get-Date $a).ToString("ddMMyyyy")

此日期格式在日志文件中找到,我的系统日期时间格式为dd / mm / yyyy。 我想在他们之间做一个比较。所以,我需要更改日期时间格式。

4 个答案:

答案 0 :(得分:5)

@jisaak的回答是几乎现场,除了日期组件前面的额外填充空间这一事实(“Tue Aug 4 17:05 :41 2015“)当你试图解析当月10日到31日之间的日期时会出错:

PS C:\> [Datetime]::ParseExact('Tue Aug  4 17:05:41 2015', 'ddd MMM  d HH:mm:ss yyyy', $us)

Tuesday, August 04, 2015 5:05:41 PM


PS C:\> [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM  d HH:mm:ss yyyy', $us)
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
At line:1 char:1
+ [Datetime]::ParseExact('Tue Aug 11 17:05:41 2015', 'ddd MMM  d HH:mm:ss yyyy', $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FormatException

最简单的方法是删除输入字符串和格式字符串中的填充空间:

function Parse-CustomDate {
    param(
        [Parameter(Mandatory=$true)]
        [string]$DateString,
        [string]$DateFormat = 'ddd MMM d HH:mm:ss yyyy',
        [cultureinfo]$Culture = $(New-Object System.Globalization.CultureInfo -ArgumentList "en-US")
    )

    # replace double space by a single one
    $DateString = $DateString -replace '\s+',' '

    [Datetime]::ParseExact($DateString, $DateFormat, $Culture)
}

答案 1 :(得分:2)

也许是原始的,但它确实起作用:)

$Date = 'Tue Aug  4 17:05:41 2015' -split "\s"
$Year = $Date[-1]
$Time = $Date | ? {$_ -match "..:..:.."}
$DayName = $Date[0]
$Day = $Date[3]
$Month = $Date[1]

Get-Date "$Month $Day $Year $Time" -Format "ddMMyyy"

04082015

答案 2 :(得分:1)

您可以使用Datetime ParseExact方法:

$us = New-Object system.globalization.cultureinfo("en-US")
[Datetime]::ParseExact('Tue Aug  4 17:05:41 2015', 'ddd MMM  d HH:mm:ss yyyy', $us)

正如Vesper所提到的,您现在可以比较日期时间对象。

答案 3 :(得分:0)

使用:

Get-Date -format d

这将以mm/dd/yyyy格式提供给您今天的日期。但要小心;这将为您提供string而不是integer