如何在PowerShell中格式化date时间?

我可以格式化Get-Date命令行,没有像这样的问题:

 $date = Get-Date -format "yyyyMMdd" 

但是一旦我有了一个variables的date ,我该如何格式化呢? 下面的声明

 $dateStr = $date -format "yyyMMdd" 

返回这个错误:

“您必须在”-f“运算符的右侧提供一个值expression式”

和你在.NET中一样。

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

要么

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

这个问题得到了解答,但是还缺less一些信息:

variables与Cmdlet

你在$Datevariables中有一个值,而-f运算符在这种forms下工作: 'format string' -f values 。 如果您调用Get-Date -format "yyyyMMdd"可以使用一些参数调用cmdlet 。 值“yyyyMMdd”是参数Format值(尝试help Get-Date -param Format )。

-f操作员

有很多格式string,至less看part1和part2 。 她使用string.Format('format string', values') 。 可以把它看作'format-string' -f values ,因为-f操作符和string.Format方法非常相似(尽pipe存在一些差异(更多的信息请看Stack Overflow的问题: PowerShell的RHS -f操作员工作? )。

你可以做的一件事是:

 $date.ToString("yyyyMMdd") 

一个非常方便 – 但可能不是全部太高效的解决方法是使用成员函数GetDateTimeFormats()

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

这将为date值输出一个大的string数组格式。 然后你可以通过[]符select数组的其中一个元素,例如,

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

一个简单而好的方法是:

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

或干脆

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

如果你在这里使用这个在DOS中:

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

如果你绝对需要使用-Format选项,那么如何做到这一点:

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

然而

 $dateStr = $date.toString('yyyMMdd') 

可能是更高效.. 🙂