我目前有一个带有日期时间的字符串,例如2013-05-09 12:13:14.000
我希望将其分解为单独的年,月,日,小时和分钟变量。
$mCase = "\d{2}/\d{2}/\d{4}"
$tempYear = $test.column1
$year = $tempYear -replace $mCase
这是我的第一个powershell脚本,所以如果我是一个菜鸟,请提前道歉
答案 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."