web-dev-qa-db-ja.com

PowerShellでDateTimeをフォーマットする方法

Get-Date コマンドレットを問題なくフォーマットできます。

$date = Get-Date -format "yyyyMMdd"

しかし、変数に 日付 が入ったら、それをどのようにフォーマットしますか?以下のステートメント

$dateStr = $date -format "yyyMMdd"

このエラーを返します:

「 ' - f'演算子の右側に値式を指定する必要があります。」

128
Ev.

。NET と同じです。

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

または

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

質問に答えますが、足りない情報がいくつかあります。

変数とコマンドレット

$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と考えてください(ただし、詳細はスタックオーバーフローの質問を参照してください。HowPowerShellの-f演算子のRHSは正しく機能しますか?)。

22
stej

非常に便利な - しかしおそらくあまりにも効率的ではない - 解決策はメンバ関数を使うことです GetDateTimeFormats()

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

これは、date-valueの書式設定スタイルの大きな文字列配列を出力します。次に、[]-演算子を使って配列の要素の1つを選ぶことができます。

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

あなたがすることができる一つのことです:

$date.ToString("yyyyMMdd")
14
John Weldon

シンプルでいい方法は次のとおりです。

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

あるいは単に

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

9
Stephen Miller

-Formatオプションを絶対に使用する必要がある場合はこれを行ってください。

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

しかしながら

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

おそらくもっと効率的です.. :)

2
tplive

あなたがDOSでこれを使うためにここに来たならば:

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

現在の日付をフォーマットしようとしている人のために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()"を使うことを忘れないでください

1
Peter L

非常に有益な @ stejからの回答 ですが、ここに短い回答があります: その他のオプション には、3つのシンプルなオプションがあります変数に格納されている[System.DateTime]をフォーマットするには:

  1. 変数を Get-DateコマンドレットGet-Date -Format "HH:mm" $dateに渡します

  2. toString()メソッド$date.ToString("HH:mm")を使用します

  3. 複合フォーマット"{0:HH:mm}" -f $dateを使用します

1
Eddie Kumar

時間とフォーマットのわずかなバリエーションが必要でした。これは私の目的には最適です

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

2019-08-16 215757

0
Scott Beeson