PowerShell - 正则表达式:年,月,日,小时和分钟

时间:2013-09-05 20:28:22

标签: regex datetime powershell

我目前有一个带有日期时间的字符串,例如2013-05-09 12:13:14.000

我希望将其分解为单独的年,月,日,小时和分钟变量。

$mCase = "\d{2}/\d{2}/\d{4}"
$tempYear = $test.column1
$year = $tempYear -replace $mCase

这是我的第一个powershell脚本,所以如果我是一个菜鸟,请提前道歉

5 个答案:

答案 0 :(得分:5)

您可以使用Get-Date执行此任务。它输出一个System.DateTime对象,您可以对其执行某些操作。这是cmdlet上的一些documentation

PS C:\> $date = Get-Date "2013-05-09 12:13:14.000"
PS C:\> $date.Year
2013
PS C:\> $date.Month
5
PS C:\> $date.Day
9
PS C:\> $date.Hour
12
PS C:\> $date.Minute
13

要获得两位数格式,请使用-Format Get-Date方法以及 MM dd 等说明符。可以找到完整的.NET日期和时间说明符列表here

PS C:\> Get-Date $date -format MM
05
PS C:\> Get-Date $date -format dd
09

答案 1 :(得分:1)

假设没有奇怪的语言环境问题,请使用:

[DateTime]$MyDate = "2013-05-09 12:13:14.000"  
Write-Host $MyDate.Year

如果您预见到区域设置/区域设置问题,则必须构建[System.Globalization.DateTimeFormatInfo]对象并在[DateTime]::Parse($MyDate, $Format)

中使用它

答案 2 :(得分:1)

上述答案是最佳解决方案,但请注意区域设置,因为datetime使用计算机上的设置,因此可能需要一年一月而不是一天一个月。

作为替代方案,您可以使用正则表达式。它解析字符串,所以如果字符串中的日期时间格式发生变化,那么你也必须更新代码。

$s = "2013-05-09 12:13:14.000"
if($s -match '(\d+)-(\d+)-(\d+) (\d+):(\d+):(?:\d+)') { 
    [pscustomobject]@{ 
        Year = $Matches[1]
        Day = $Matches[2]
        Month = $Matches[3]
        Hour = $Matches[4]
        Minute = $Matches[5] 
    } 
}


Year   : 2013
Day    : 05
Month  : 09
Hour   : 12
Minute : 13

答案 3 :(得分:1)

使用正则表达式,您可以捕获相关的时间部分并将它们分配给变量:

PS> $date = '2013-05-09 12:13:14.000'
PS> $year,$month,$day,$hour,$minutes,$seconds = [regex]::Matches($date,'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})').Groups | Select-Object -Skip 1 -ExpandProperty Value

PS> $year,$month,$day,$hour,$minutes,$seconds

2013
05
09
12
13
14

答案 4 :(得分:1)

 $Date=('2013-05-09 12:13:14.000'.substring(0,10) -split '-')
 $Time=('2013-05-09 12:13:14.000'.substring(11) -split ':')
 Write-Host "The year was $($Date[0]). It was the $([int]$Date[2])$(switch ([int]$Date[2]){1{'st'}2{'nd'}3{'rd'}default{'th'}}) of $([System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames[[int]$Date[1]]), and it was a cold morning that day. When the clock stuck $([int]$Time[0]) all hell broke lose."