将字符串日期更改为所需格式

时间:2018-05-04 14:27:00

标签: regex powershell date

我想在邮件文件中找到日期,以便将其附加到文件名中。为此,我阅读了邮件文件的第4行,其中包含收到邮件的日期。日期以这种格式写在邮件中:

2018年5月1日星期二15:56:12 +0200

我想用这种格式:

yyyy_mm_dd_hh_mm

这是我用来更改日期的代码,使其看起来更像我想要的格式。

cd C:\Temp\Test
$date = Get-Content RemoteBackupServer.eml | Select -Index 3
$date = $date.Trim()
$date = $date -replace 'Mon, |Tue, |Wed, |Thu, |Fri, |Sat, |Sun, ',''
$date = $date -replace ' Jan ','.01.'
$date = $date -replace ' Feb ','.02.'
$date = $date -replace ' Mar ','.03.'
$date = $date -replace ' Apr ','.04.'
$date = $date -replace ' May ','.05.'
$date = $date -replace ' Jun ','.06.'
$date = $date -replace ' Jul ','.07.'
$date = $date -replace ' Aug ','.08.'
$date = $date -replace ' Sep ','.09.'
$date = $date -replace ' Oct ','.10.'
$date = $date -replace ' Nov ','.11.'
$date = $date -replace ' Dec ','.12.'
$date = $date -replace '*:\d+ ',''
Write-Host $date

这是我用我的代码得到的结果。

1.05.2018 15:56:12 +0200

但是在最后一行我得到一个错误“FullyQualifiedErrorId:InvalidRegularExpression”。

有人可以帮助我以上面提到的格式获取日期吗?

编辑:

以下是重命名文件的代码,如果有人感兴趣的话:

cd C:\Temp\Test\Test2
$mails = Get-ChildItem -Filter *.eml

for ($i=0; $i -lt $mails.Count; $i++) {
    $mail = $mails[$i].FullName
    $date = Get-Content $mail | Select -Index 3
    $date = $date.Trim()
    $date = (Get-Date $date).ToString('yyyy_MM_dd_HH_mm')
    $extension = $date + '.eml'
    $mail | Rename-Item -NewName {$mail.Replace('.eml',"$extension")}
}

1 个答案:

答案 0 :(得分:2)

使用Get-Dateformat strings

(Get-Date 'Tue, 1 May 2018 15:56:12 +0200').ToString('yyyy_MM_dd_hh_mm')

要获得24小时(这在格式字符串的链接中有所涉及):

(Get-Date 'Tue, 1 May 2018 15:56:12 +0200').ToString('yyyy_MM_dd_HH_mm')