Get-Date
コマンドレットを問題なくフォーマットできます。
$date = Get-Date -format "yyyyMMdd"
しかし、変数に 日付 が入ったら、それをどのようにフォーマットしますか?以下のステートメント
$dateStr = $date -format "yyyMMdd"
このエラーを返します:
「 ' - f'演算子の右側に値式を指定する必要があります。」
質問に答えますが、足りない情報がいくつかあります。
変数とコマンドレット
$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
と考えてください(ただし、詳細はスタックオーバーフローの質問を参照してください。How )PowerShellの-f演算子のRHSは正しく機能しますか?)。
非常に便利な - しかしおそらくあまりにも効率的ではない - 解決策はメンバ関数を使うことです GetDateTimeFormats()
、
$d = Get-Date
$d.GetDateTimeFormats()
これは、date-valueの書式設定スタイルの大きな文字列配列を出力します。次に、[]
-演算子を使って配列の要素の1つを選ぶことができます。
PS C:\> $d.GetDateTimeFormats()[12]
Dienstag, 29. November 2016 19.14
あなたがすることができる一つのことです:
$date.ToString("yyyyMMdd")
シンプルでいい方法は次のとおりです。
$time = (Get-Date).ToString("yyyy:MM:dd")
あるいは単に
(Get-Date).ToString("yyyy:MM:dd")
-Format
オプションを絶対に使用する必要がある場合はこれを行ってください。
$dateStr = (Get-Date $date -Format "yyyMMdd")
しかしながら
$dateStr = $date.toString('yyyMMdd')
おそらくもっと効率的です.. :)
あなたがDOSでこれを使うためにここに来たならば:
powershell -Command (Get-Date).ToString('yyyy-MM-dd')
現在の日付をフォーマットしようとしている人のために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()"を使うことを忘れないでください
非常に有益な @ stejからの回答 ですが、ここに短い回答があります: その他のオプション には、3つのシンプルなオプションがあります変数に格納されている[System.DateTime]をフォーマットするには:
変数を Get-Dateコマンドレット :Get-Date -Format "HH:mm" $date
に渡します
toString()メソッド :$date.ToString("HH:mm")
を使用します
複合フォーマット :"{0:HH:mm}" -f $date
を使用します
時間とフォーマットのわずかなバリエーションが必要でした。これは私の目的には最適です
$((get-date).ToLocalTime()).ToString("yyyy-MM-dd HHmmss")
2019-08-16 215757