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

$date = Get-Date -format "yyyyMMdd"

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

$dateStr = $date -format "yyyMMdd"

返回以下错误:

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


当前回答

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

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

其他回答

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

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

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

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

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

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

一个简单而又好的方法是:

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

我需要时间和稍微改变一下格式。这对我的目的很有效:

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

2019-08-16 215757

根据评论中的@mklement0,这应该会产生相同的结果:

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

问题得到了回答,但还缺少一些信息:

变量vs. Cmdlet

你在$Date变量中有一个值,-f操作符以这种形式工作:'format string' -f values。如果调用Get-Date -format "yyyyMMdd",则调用带有一些参数的cmdlet。值“yyyyMMdd”是参数Format的值(请尝试help Get-Date -param Format)。

- f运营商

有很多格式字符串。至少看一下第一部分和第二部分。她用绳子。格式('格式字符串',值')。可以把它看作是'format-string' -f值,因为-f操作符的工作原理与字符串非常相似。格式方法(尽管有一些区别(要了解更多信息,请参阅Stack Overflow: PowerShell的-f操作符的RHS是如何工作的?)