[英]How to format a DateTime in PowerShell
問題得到了回答,但缺少更多信息:
變量與 Cmdlet
您在$Date
變量中有一個值,並且-f
運算符確實以這種形式工作: 'format string' -f values
。 如果調用Get-Date -format "yyyyMMdd"
,則調用帶有一些參數的cmdlet 。 值“yyyyMMdd”是參數Format
的值(嘗試help Get-Date -param Format
)。
-f
操作符
有很多格式字符串。 至少看看part1和part2 。 她使用string.Format('format string', values')
。 將其視為'format-string' -f values
,因為-f
運算符的工作方式與string.Format
方法非常相似(盡管存在一些差異(有關更多信息,請查看 Stack Overflow 上的問題: PowerShell 的 RHS究竟如何-f 操作員工作? )。
一個簡單而好的方法是:
$time = (Get-Date).ToString("yyyy:MM:dd")
一個非常方便 - 但可能不是太有效 - 解決方案是使用成員函數GetDateTimeFormats()
,
$d = Get-Date
$d.GetDateTimeFormats()
這將輸出日期值的格式樣式的大型字符串數組。 然后,您可以通過[]
-operator 選擇數組的元素之一,例如,
PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14
你可以做的一件事是:
$date.ToString("yyyyMMdd")
如果您絕對需要使用-Format
選項,請執行此操作:
$dateStr = Get-Date $date -Format "yyyMMdd"
然而
$dateStr = $date.toString('yyyMMdd')
可能更有效.. :)
我需要時間和格式上的細微變化。 這對我的目的很有用:
$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")
2019-08-16 215757
根據評論中的@mklement0,這應該產生相同的結果:
(get-date).ToString("yyyy-MM-dd HHmmss")
如果您在cmd.exe
使用它(在批處理文件中):
powershell -Command (Get-Date).ToString('yyyy-MM-dd')
@stej 提供的信息非常豐富,但這里有一個簡短的答案:在其他選項中,您有3 個簡單的選項來格式化存儲在變量中的 [System.DateTime]:
將變量傳遞給Get-Date cmdlet : Get-Date -Format "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
即不要忘記使用“ToUniversalTime()”
您可以使用它來選擇您想要的格式,然后將其粘貼到需要的地方。
$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."
根據您的輸出需要格式化日期時間
如果要格式化日期並將字符串分配給變量。 我結合了 PowerShell 和 .NET 來提供靈活性。
$oDate = '{0}' -f ([system.string]::format('{0:yyyyMMddHHmmss}',(Get-Date)))
這是如何工作的
例子
如果運行的日期和時間是 2021 年 7 月 5 日星期一下午 5:45:22(格式“{0:F}”)。
使用代碼
您可以通過使用Microsoft .NET 自定義日期時間表示法修改“yyyMMddHHmmss”來自定義字符串以滿足您的要求。
我將dueDate 字符串轉換為日期時間,然后對其進行格式化。
[Datetime]::ParseExact($dueDate,'MM/dd/yyyy H:mm:ss',$null).ToString('MM/dd/yyyy')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.