我目前有一个带有日期时间的字符串,例如 2013-05-09 12:13:14.000
我想对其进行正则表达式将其拆分为单独的年、月、日、小时和分钟变量。
$mCase = "\d{2}/\d{2}/\d{4}"
$tempYear = $test.column1
$year = $tempYear -replace $mCase
这是我的第一个 powershell 脚本,如果我是菜鸟,请提前道歉
我目前有一个带有日期时间的字符串,例如 2013-05-09 12:13:14.000
我想对其进行正则表达式将其拆分为单独的年、月、日、小时和分钟变量。
$mCase = "\d{2}/\d{2}/\d{4}"
$tempYear = $test.column1
$year = $tempYear -replace $mCase
这是我的第一个 powershell 脚本,如果我是菜鸟,请提前道歉
您可以Get-Date
用于此任务。它输出一个System.DateTime
可以对其执行一些操作的对象。这是有关 cmdlet的一些文档。
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
要获得两位数格式,请结合使用MM或dd-Format
等说明符的方法。可以在此处找到 .NET 日期和时间说明符的完整列表。Get-Date
PS C:\> Get-Date $date -format MM
05
PS C:\> Get-Date $date -format dd
09
$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."
假设没有奇怪的语言环境问题,只需使用:
[DateTime]$MyDate = "2013-05-09 12:13:14.000"
Write-Host $MyDate.Year
如果您预见到语言环境/区域设置问题,您将必须构造一个[System.Globalization.DateTimeFormatInfo]
对象并在[DateTime]::Parse($MyDate, $Format)
上面的答案是最好的解决方案,但是要小心区域设置,因为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
使用正则表达式,您可以捕获相关的时间部分并将它们分配给变量:
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