簡體   English   中英

如何在 PowerShell 中格式化日期時間

[英]How to format a DateTime in PowerShell

我可以像這樣格式化Get-Date cmdlet 沒問題:

$date = Get-Date -format "yyyyMMdd"

但是一旦我在一個變量中得到了一個日期,我該如何格式化呢? 下面的聲明

$dateStr = $date -format "yyyMMdd"

返回此錯誤:

“您必須在 '-f' 運算符的右側提供一個值表達式”

和你在.NET 中一樣

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

或者:

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

問題得到了回答,但缺少更多信息:

變量與 Cmdlet

您在$Date變量中有一個值,並且-f運算符確實以這種形式工作: 'format string' -f values 如果調用Get-Date -format "yyyyMMdd" ,則調用帶有一些參數的cmdlet 值“yyyyMMdd”是參數Format的值(嘗試help Get-Date -param Format )。

-f操作符

有很多格式字符串。 至少看看part1part2 她使用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]:

  1. 將變量傳遞給Get-Date cmdletGet-Date -Format "HH:mm" $date

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

  3. 使用復合格式"{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)))

這是如何工作的

  • 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 自定義日期時間表示法修改“yyyMMddHHmmss”來自定義字符串以滿足您的要求。

我將dueDate 字符串轉換為日期時間,然后對其進行格式化。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM