2

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

我想对其进行正则表达式将其拆分为单独的年、月、日、小时和分钟变量。

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

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

4

5 回答 5

6

您可以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

要获得两位数格式,请结合使用MMdd-Format等说明符的方法。可以在此处找到 .NET 日期和时间说明符的完整列表。Get-Date

PS C:\> Get-Date $date -format MM
05
PS C:\> Get-Date $date -format dd
09
于 2013-09-05T20:39:32.050 回答
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."
于 2013-09-06T19:55:59.197 回答
1

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

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

如果您预见到语言环境/区域设置问题,您将必须构造一个[System.Globalization.DateTimeFormatInfo]对象并在[DateTime]::Parse($MyDate, $Format)

于 2013-09-05T20:37:34.890 回答
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
于 2013-09-05T20:47:20.437 回答
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
于 2013-09-06T08:54:56.763 回答