適材適所

PowerShellを中心にプログラミングやシステム管理の備忘録的なブログ

【Get-Date】PowerShellで日付を扱う

ファイル名に日付を入れてみたり、フォルダに年月を入れてみたり、日付で比較を行うなど、今日時点の日付を取得するのはよくあると思います。

そんなときに役に立つ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-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

PowerShellの関連記事

www.tekizai.net

www.tekizai.net

www.tekizai.net

www.tekizai.net