ファイル名に日付を入れてみたり、フォルダに年月を入れてみたり、日付で比較を行うなど、今日時点の日付を取得するのはよくあると思います。
そんなときに役に立つGet-Dateコマンドレットの実践的な使い方の紹介です。
日付を扱うときはGet-Dateコマンドレットを使う
Get-Dateコマンドレットは現在の日付、時間を取得するコマンドレットです。
PS C:\> Get-Date 2021年3月13日 10:28:12
単体で実行すると、実行時点の日付時間を知ることができます。
月だけなどの個別の要素を取り出したい
年や月といった個別の要素を取り出したいときは、次のようにすると簡単に取得することができます。
PS C:\> (Get-Date).day 13 PS C:\> (Get-Date).Month 3 PS C:\> (Get-Date).Year 2021 PS C:\> (Get-Date).datetime 2021年3月13日 11:46:58 PS C:\> Get-Date 2021年3月13日 11:47:03
Get-Dateは何者?
さて、当たり前のようにGet-Dateを使えば簡単!!などと言っておりますが、そもそもGet-Dateコマンドレットを実行すると何が起こっているのでしょうか。
Get-Memberコマンドレットにパイプしてがあげるとその正体がわかります。
PS C:\> Get-Date|Get-Member TypeName: System.DateTime NameMemberTypeDefinition ------------------------ AddMethoddatetime Add(timesp... AddDaysMethoddatetime AddDays(do... ・・・
Get-Dateの正体は、.NETのSystem.DateTimeオブジェクトということがわかりました。
そのため、Get-Dateコマンドレットを用いずに、次のように書いても同じ結果を得ることができます。
#Get-Dateと同じ出力を得ることができる [System.DateTime]::Now [System.DateTime]::Now.Day [System.DateTime]::Now.Month [System.DateTime]::Now.Year [System.DateTime]::Now.DateTime
Get-Dateのチートシート
Get-Dateの正体が判明したところで、Get-Dateの便利?な使い方の例をあげておきます。
yyyyMMdd形式
#yyyymmdd形式 Get-Date -Format 'yyyyMMdd'
翌日を取得する
#翌日 (Get-Date).AddDays(1)
今月末を取得する
若干無理やりですが。
Get-Dateの-Date、-Month、-Yearオプションを指定すると、指定した値の日付を持ったDateTimeオブジェクトが新しく生成されます。
それを利用してちょこちょこ操作しています。
$d=(Get-Date);(Get-Date -Year $d.year -month $d.month -Date 1).AddMonths(1).AddDays(-1)
終わりに
プログラム言語によって、日付の扱い方に癖があったりしますが
(誰だJavaの悪口を言っているのは!!)
PowerShellの場合、.NETの直感的で操作しやすいDateTimeオブジェクトの恩恵を受けることができ、簡単に日付を扱うことができます。
また、コマンドレットという形を取っており、素のDateTimeオブジェクトよりも少しだけ柔軟性があがっていることもいいですね。
さすが、PowerShell!!
そこにシビれる!あこがれるゥ!
というわけで、ここまでお読みいただき、ありがとうございました。
参考
Custom date and time format strings | Microsoft Docs
Get-Date (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs