適材適所

PowerShellやVBAなどプログラミング系の話多めで

【PowerShell】日付を扱いたい【Get-Date】

ファイル名に日付を入れてみたり、

フォルダに年月を入れてみたり、

日付で比較を行うなど、

今日時点の日付を取得するのはよくあると思います。

そんなときに役に立つGet-Dateコマンドレットの実践的な使い方の紹介です。

Get-Date

Get-Dateコマンドレットは現在の日付、時間を取得するコマンドレットです。

PS C:\> Get-Date

202131310: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
202131311:46:58
PS C:\> Get-Date

202131311:47:03

とすれば簡単に取得することができます。

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オブジェクトです。

そのため、次のように書いても同じことができます。

PS C:\> [System.DateTime]::Now.Date

20213130:00:00


PS C:\> [System.DateTime]::Now.Day
13
PS C:\> [System.DateTime]::Now.Month
3
PS C:\> [System.DateTime]::Now.Year
2021
PS C:\> [System.DateTime]::Now.DateTime
202131311:40:55

Get-Dateのチートシート

Get-Dateの正体が判明したところで、

Get-Dateの便利?な使い方の例をあげておきます。

yyyyMMdd形式

PS C:\> Get-Date -Format 'yyyyMMdd'
20210313

翌日を取得する

翌日の日付はDateTimeオブジェクトを用います。

PS C:\> (Get-Date).AddDays(1)

202131411:56:50

今月末を取得する

若干無理やりですが。

Get-Dateの-Date、-Month、-Yearオプションを指定すると、指定した値の日付を持ったDateTimeオブジェクトが新しく生成されます。

それを利用してちょこちょこ操作しています。

PS C:\> $d=(Get-Date);(Get-Date -Year $d.year -month $d.month -Date 1).AddMonths(1).AddDays(-1)

20213310:00:00

終わりに

プログラム言語によって、

日付の扱い方に癖があったりしますが

(J..いえ、これ以上〇avaの悪口はやめましょう)、

PowerShellの場合、

.NETの直感的で操作しやすいDateTimeオブジェクトの恩恵を

受けることができ、簡単に日付を扱うことができます。

また、コマンドレットという形を取っており、

素のDateTimeオブジェクトよりも

少しだけ柔軟性があがっていることもいいですね。

さすが、PowerShell!!

そこにシビれる!あこがれるゥ!

というわけで、ここまでお読みいただき、ありがとうございました。

参考

Custom date and time format strings | Microsoft Docs

Get-Date (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Docs

PowerShellの関連記事

www.tekizai.net

www.tekizai.net

www.tekizai.net

www.tekizai.net