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

$date = Get-Date -format "yyyyMMdd"

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

$dateStr = $date -format "yyyMMdd"

返回以下错误:

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


当前回答

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

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

这将输出date-value的格式化样式的大型字符串数组。然后,您可以通过[]-操作符选择数组中的一个元素,例如,

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

其他回答

你可以做的一件事是:

$date.ToString("yyyyMMdd")

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

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

这将输出date-value的格式化样式的大型字符串数组。然后,您可以通过[]-操作符选择数组中的一个元素,例如,

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

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

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

我把我的dueDate字符串转换为日期时间,然后格式化它。

 [Datetime]::ParseExact($dueDate,'MM/dd/yyyy H:mm:ss',$null).ToString('MM/dd/yyyy') 

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

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

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

这是如何工作的

PowerShell Operator - '{0}' -f (.....) .NET表示法- [system.string]::format('customformat',InputObject) 结合PowerShell和。net的自定义格式- '{0:yyyyMMddHHmmss}' PowerShell提供的输入对象cmdlet (Get-Date) 存储在PowerShell变量- $oDate中

例子

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

$oDate = 20210705174522

使用代码

您可以通过使用Microsoft . net自定义日期时间符号修改'yyyMMddHHmmss'来定制字符串以满足您的要求。