我可以格式化Get-Date cmdlet这样没有问题:

$date = Get-Date -format "yyyyMMdd"

但是,一旦我在变量中获得了日期,我该如何格式化它呢?下面的声明

$dateStr = $date -format "yyyMMdd"

返回以下错误:

“你必须提供价值表达 在-f的右边 运营商”


当前回答

来自@stej的回答非常翔实,但这里是一个简短的回答: 在其他选项中,您有3个简单的选项来格式化[System. System.]存储在变量中的DateTime:

将变量传递给Get-Date cmdlet: 获取日期-格式“HH:mm”$date 使用toString()方法: date.ToString美元(“HH: mm”) 使用复合格式: "{0:HH:mm}" -f $date

其他回答

对于任何试图格式化当前日期以用于HTTP报头的人,请使用“r”格式(RFC1123的缩写),但请注意警告…

PS C:\Users\Me> (get-date).toString("r")
Thu, 16 May 2019 09:20:13 GMT
PS C:\Users\Me> get-date -format r
Thu, 16 May 2019 09:21:01 GMT
PS C:\Users\Me> (get-date).ToUniversalTime().toString("r")
Thu, 16 May 2019 16:21:37 GMT

例如,不要忘记使用“tuniversal()”

如果你在cmd.exe中使用这个(在批处理文件中):

powershell -Command (Get-Date).ToString('yyyy-MM-dd')

你可以做的一件事是:

$date.ToString("yyyyMMdd")

你可以用它来选择你想要的格式,然后在任何需要的地方跳过它。

$DTFormats = (Get-Date).GetDateTimeFormats()
$Formats = @()
$i=0
While ($i -lt $DTFormats.Count){
    $row = [PSCustomObject]@{
        'IndexNumber' = $i
        'DateTime Format' = $DTFormats[$i]
    }
    $Formats += $row
    $i++
}

$DTSelection = ($Formats | Out-GridView -OutputMode Single -Title 'Select DateTime Format').IndexNumber
$MyDTFormat = "(Get-Date).GetDateTimeFormats()[$DTSelection]"
Write-Host " "
Write-Host " Use the following code snippet to get the DateTime format you selected:"
Write-Host "    $MyDTFormat" -ForegroundColor Green
Write-Host " "
$MyDTFormat | Clip
Write-Host " The code snippet has been copied to your clipboard. Paste snippet where needed."

和在。net中一样:

$DateStr = $Date.ToString("yyyyMMdd")

Or:

$DateStr = '{0:yyyyMMdd}' -f $Date