PowerShell: 日付をyyyymmdd、時刻をhhmmss形式で取得
PowerShellで日付や時刻を取得する際に、 yyyy/mm/ddやhh:mm:ssといった 任意の文字列型フォーマットで取得する方法を紹介します。 日時情報を見やすく加工したり、 ファイル名に日付情報を使用する際に使えます。
最初に年月日の形式、次に時刻の形式の順で説明します。
年月日のフォーマット(yyyy/MM/dd)
現在日を取得して任意のフォーマットに変換するとします。
現在日時はGet-Dateコマンドレット、
またはDateTimeクラスのNowプロパティで取得できます。
Get-Dateコマンドレットの場合は-Formatパラメータで形式を指定し、 Nowプロパティの場合はToStringメソッドで形式を指定します。
まずはGet-Dateコマンドレットの場合
Get-Date -Format "yyyy/MM/dd" # 実行結果 2022/01/28
次はDateTimeオブジェクトのNowプロパティの場合です。
[datetime]::Now.ToString("yyyy/MM/dd") # 実行結果 2022/01/28
年月日を指定する場合、日付の指定に注意してください。
小文字の「mm」ではなく大文字で「MM」です。
.NET Frameworkの書式指定しでは小文字の「m」は「minute(分)」を意味し、
大文字の「M」は「month(月)」を意味します。
そして「M」は1~31、「MM」は01~31となります。
0パディングする場合は「MM」です。
年・月・日・曜日に関する主な書式指定子は次の通りです。
書式指定子 | 内容 |
---|---|
yy | 年 2桁(00 - 99) |
yyyy | 年 4桁 |
M | 月(1 - 12) |
MM | 月(01 - 12) |
d | 日(1 - 31) |
dd | 日(01 - 31) |
ddd | 曜日の省略名(日 - 土) |
dddd | 曜日の完全名(日曜日 - 土曜日) |
MとMM、dとddの違いは1桁の時に0埋めするかどうかです。
書式指定子の参考サイト
カスタム日時形式文字列 | Microsoft Docs
時刻のフォーマット(HH:mm:ss)
次は時刻のフォーマット指定についてです。
Get-DateとNowプロパティでの取得を同時に紹介します。
Get-Date -Format "HH:mm:ss" [datetime]::Now.ToString("HH:mm:ss") # 実行結果 10:48:04 10:48:04
注意する点は時刻です。 「hh」ではなく大文字の「HH」です。 小文字の場合は12時間形式で1~12までの表示となります。 24時間形式で表示する場合は大文字で「HH」とします。 「H」は0~23、「HH」は00~23です。
時間・分・秒・ミリ秒に関する主な書式指定子を紹介します。
書式指定子 | 内容 |
---|---|
h | 時間(1 - 12) |
hh | 時間(01 - 12) |
tt | 午前 or 午後 |
H | 時間(1 - 24) |
HH | 時間(01 - 24) |
m | 分(0 - 59) |
mm | 分(00 - 59) |
s | 秒(0 - 59) |
ss | 秒(00 - 59) |
Hやmなど1つの場合は0パディングなしで、 HHやmmなど2つ並べた場合は0パディングありです。
hやhhで12時間形式で表示する場合、 合わせて午前・午後の情報も「tt」で取得できます。
[datetime]::Now.ToString("tt hh:mm:ss") # 実行結果 午前 11:19:26
(まとめ記事: PowerShell 日付・時刻)