如何在PowerShell中格式化DateTime

时间:2010-02-12 04:09:59

标签: datetime powershell

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

$date = Get-Date -format "yyyyMMdd"

但是一旦我在变量中得到a date,我该如何格式化它?以下声明

$dateStr = $date -format "yyyMMdd"

返回此错误:

  

“您必须提供值表达式   在'-f'的右侧   运算符“

12 个答案:

答案 0 :(得分:185)

.NET中的相同:

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

或者:

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

答案 1 :(得分:22)

问题已得到解答,但缺少更多信息:

变量与Cmdlet

$Date变量中有一个值,-f运算符的格式为'format string' -f valuesGet-Date -format "yyyyMMdd"。如果您致电Format,则可以使用某些参数拨打cmdlet。值“yyyyMMdd”是参数help Get-Date -param Format的值(尝试-f)。

string.Format('format string', values')运营商

有很多格式字符串。至少看part1part2。她使用'format-string' -f values。可以将其视为-f,因为string.Format运算符与{{1}}方法的工作方式非常相似(尽管存在一些差异(有关更多信息,请查看Stack Overflow上的问题: {{ 3}} 的)。

答案 2 :(得分:14)

你可以做的一件事是:

$date.ToString("yyyyMMdd")

答案 3 :(得分:13)

一个非常方便 - 但可能不是太有效 - 的解决方案是使用成员函数GetDateTimeFormats()

$d = Get-Date
$d.GetDateTimeFormats()

这会为日期值输出一个大型的字符串数组样式。然后,您可以通过[] - 运算符选择数组中的一个元素,例如

PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14

答案 4 :(得分:9)

一种简单而美好的方式是:

$time = (Get-Date).ToString("yyyy:MM:dd")

或只是

(Get-Date).ToString("yyyy:MM:dd")

答案 5 :(得分:2)

如果你在DOS中使用它:

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

答案 6 :(得分:2)

如果您绝对需要使用IntentCompat.FLAG_ACTIVITY_CLEAR_TASK选项,请执行此操作:

-Format

然而

$dateStr = (Get-Date $date -Format "yyyMMdd")

可能更有效..:)

答案 7 :(得分:2)

我需要时间和格式上的一些细微变化。这对我来说很有效:

$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")
  

2019-08-16 215757

答案 8 :(得分:1)

非常有用的answer from @stej,但这是一个简短的答案: 在other options中,您有 3个简单选项来格式化存储在变量中的[System.DateTime]:

  1. 将变量传递到Get-Date cmdletGet-Date -Format "HH:mm" $date

  2. 使用toString() method$date.ToString("HH:mm")

  3. 使用Composite formatting"{0:HH:mm}" -f $date

答案 9 :(得分:0)

对于任何试图格式化当前日期以供在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

即不要忘记使用“ ToUniversalTime()”

答案 10 :(得分:0)

您可以使用它来选择您想要的格式,然后将其粘贴到任何需要的地方。

$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."

答案 11 :(得分:0)

根据输出需要格式化日期时间

如果要格式化日期并将字符串分配给变量。 我结合了 PowerShell 和 .NET 来提供灵活性。

    $oDate = '{0}' -f ([system.string]::format('{0:yyyyMMddHHmmss}',(Get-Date)))

工作原理

  • PowerShell 操作符 - '{0}' -f (.....)
  • .NET 符号 - [system.string]::format('customformat',InputObject)
  • 通过将 PowerShell 与 .NET 结合使用自定义格式 - '{0:yyyyMMddHHmmss}'
  • PowerShell cmdlet 提供的输入对象 - (Get-Date)
  • 存储在 PowerShell 变量中 - $oDate

示例

如果运行的日期和时间是 2021 年 7 月 5 日星期一下午 5:45:22(格式“{0:F}”)。

  • $oDate = 20210705174522

使用代码

您可以通过使用 Microsoft .NET Custom Date Time Notation 修改“yyyMMddHHmmss”来自定义字符串以满足您的要求。