【powershell】それっぽい日付文字列を日付型に変換してフォーマット指定文字列化する
"2021/5/6" みたいな日付文字列をいったん日付型に変えて、フォーマット指定で再度文字列化する方法。
RedmineにRESTでチケット登録するときに、日付がyyyy-mm-dd 形式なので、それに合わせるようにフォーマット変換する。
目次
本文
1. 日付型に変換 → フォーマット指定文字列化
やり方はいくつかあるみたい
1.1 Get-Date コマンドレットを使う
Get-Dateにそれっぽい文字列を与えると、日付型にしてくれる。Get-Date自体に-Formatオプションがあるので、日付型データになってしまえばフォーマット指定するのは簡単。 サンプルとして”2021/5/6" という日付文字列を使用する。
> $a = "2021/5/6" > get-date -Format "yyyy-MM-dd" $a 2021-05-06
以下のように、文字列をパイプでget-dateに渡してもOK。
> $a | get-date -Format "yyyy-MM-dd" 2021-05-06
フォーマット指定の方法は汎用的な -f オプションでもOK。
> "{0:yyyy-MM-dd}" -f (get-date $a) 2021-05-06
1.2 String型にはToDateTimeメソッドがあるけど?
文字列型のメソッドにToDateTimeがあるけど、これの使い方が良くわからなかったので調べた。
ToDateTimeは引数が必要なメソッドらしいのだが、何を指定すればよいかわかりにくい。
以下の方の記事で勉強になった。
PowerShellで日付書式にカスタム書式パターンを指定する - tech.guitarrapc.cóm
[System.Globalization.CultureInfo]::InvariantCulture という訳の分からないものを与えるだのだそうだ。
> $a = "2021/5/6" > $a.ToDateTime([System.Globalization.CultureInfo]::InvariantCulture) 2021年5月6日 0:00:00 ・・・日付型になった! > "{0:yyyy-MM-dd}" -f $a.ToDateTime([System.Globalization.CultureInfo]::InvariantCulture) 2021-05-06
1.3 単なるキャストでもOKみたい
人を馬鹿にしているというくらい簡単に日付型のデータが作成できる。
> $a = [DateTime]"2021/5/6" > "{0:yyyy-MM-dd}" -f $a 2021-05-06
バージョン情報
> $PSVersionTable Name Value ---- ----- PSVersion 5.1.19041.1023