PowerShell:
从字符串解析日期

如何做:

PowerShell使用Get-Date cmdlet和[datetime]类型加速器使从字符串解析日期变得简单,这些对于标准日期格式非常有效。对于更复杂或非标准的日期字符串,可以利用[datetime]::ParseExact方法来指定确切的格式。

使用Get-Date[datetime]:

# 使用Get-Date进行简单转换
$stringDate = "2023-04-01"
$date = Get-Date $stringDate
echo $date

示例输出:

2023年4月1日 星期六 上午12:00:00
# 使用类型加速器[datetime]
$stringDate = "April 1, 2023"
$date = [datetime]$stringDate
echo $date

示例输出:

2023年4月1日 星期六 上午12:00:00

使用[datetime]::ParseExact解析非标准格式:

对于未自动识别的格式,你可以定义确切的格式以确保正确解析。

$stringDate = "01-04-2023 14:00"
$format = "dd-MM-yyyy HH:mm"
$culture = [Globalization.CultureInfo]::InvariantCulture
$date = [datetime]::ParseExact($stringDate, $format, $culture)
echo $date

示例输出:

2023年4月1日 星期六 下午2:00:00

利用第三方库

尽管PowerShell本身对于日期解析非常强大,但对于非常复杂的场景或额外的功能,你可能会探索.NET库例如NodaTime,尽管对于许多典型用例,PowerShell的本地功能将足够。

# 仅作为示例使用NodaTime,请注意你需要将库添加到项目中
# Install-Package NodaTime -Version 3.0.5
# 使用NodaTime解析日期
[string]$stringDate = "2023-04-01T14:00:00Z"
[NodaTime.Instant]::FromDateTimeUtc([datetime]::UtcNow)
[NodaTime.LocalDate]$localDate = [NodaTime.LocalDate]::FromDateTime([datetime]::UtcNow)
echo $localDate

示例注意: 上述代码是概念性示例。实践中,确保正确地将NodaTime添加到你的项目中,以便类型和方法可用。