PowerShellで日付を扱うときの中心がGet-Dateです。現在の日時を取得し、-Formatで好きな書式の文字列に整えられます。ログのタイムスタンプ、バックアップファイル名、日付の計算など、スクリプトのあらゆる場面で使います。
使い方は簡単ですが、最大の落とし穴は書式指定子の大文字小文字です。月はMM、分はmm。24時間はHH、12時間はhh。これを取り違えると、月のつもりが分になっていた、という気づきにくいバグになります。この記事では、実機で確認しながら、書式・計算・ファイル名付与までを整理します。
- 現在日時は
Get-Date、整形はGet-Date -Format "yyyy/MM/dd HH:mm:ss"です。 - 大文字小文字で意味が変わります。月は
MM、分はmm、24時間はHH、12時間はhhです。 - ファイル名には
yyyyMMdd_HHmmssを使います。:はファイル名に使えないためHH:mm:ssは不可です。 - 日付の加算・減算は
(Get-Date).AddDays(7)や.AddDays(-1)のように行います。 - 2つの日付の差は引き算で求められ、
TimeSpanとして.Daysなどが取れます。 - 曜日名(
dddd)や月名(MMMM)は、言語設定によって日本語・英語が変わります。
日付はログ出力やファイル名付与で多用します。ログを出力する簡易レポート、ログファイルをリアルタイム監視する方法、定期実行のスケジュールタスクを自動作成する方法とあわせて使うと効果的です。
現在の日付・時刻を取得する
Get-Dateを実行すると、現在の日時がDateTimeオブジェクトとして得られます。年・月・日などの部分も、プロパティで個別に取り出せます。
# 現在の日時(DateTime オブジェクト) $now = Get-Date # 各部分をプロパティで取り出す $now.Year # 年 $now.Month # 月 $now.Day # 日 $now.Hour # 時 $now.DayOfWeek # 曜日 # 特定の日付を作る(文字列から) $date = Get-Date "2026-03-09 14:05:07"
Get-Date "2026-03-09"のように文字列を渡すと、その日付のオブジェクトを作れます。以降の例では、説明をわかりやすくするため2026-03-09 14:05:07を使います。
-Formatで好きな書式に整形する
日時を文字列に整えるには-Formatに書式指定子を渡します。(Get-Date).ToString("...")でも同じ結果になります。
Get-Date -Format "yyyy/MM/dd" # 2026/03/09
Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 2026-03-09 14:05:07
Get-Date -Format "yyyy年MM月dd日" # 2026年03月09日
# ToString でも同じ
(Get-Date).ToString("yyyy/MM/dd HH:mm:ss")
実機でも、2026-03-09 14:05:07に対して"yyyy/MM/dd HH:mm:ss"が2026/03/09 14:05:07、"yyyy年MM月dd日"が2026年03月09日になることを確認しています。
書式指定子の一覧
よく使う書式指定子をまとめます。下の例はすべて2026-03-09 14:05:07(月曜日)を整形した結果です。
| 指定子 | 意味 | 出力例 |
|---|---|---|
yyyy |
年(4桁) | 2026 |
yy |
年(2桁) | 26 |
MM |
月(2桁) | 03 |
M |
月(先頭ゼロなし・単独不可) | 3(例 M/d→3/9) |
MMMM |
月の名前 | 3月 |
dd |
日(2桁) | 09 |
d |
日(先頭ゼロなし・単独不可) | 9(例 M/d→3/9) |
dddd |
曜日の名前 | 月曜日 |
HH |
時(24時間・2桁) | 14 |
hh |
時(12時間・2桁) | 02 |
mm |
分(2桁) | 05 |
ss |
秒(2桁) | 07 |
tt |
午前・午後 | 午後 |
注意したいのが、ToString("M")やToString("d")のように1文字だけを渡したときです。この場合、PowerShell(.NET)はそれを「月数」「日数」ではなく、あらかじめ定義された標準書式パターンと解釈します。実機ではToString("d")が2026/03/09(短い日付)、ToString("M")が3月9日になりました。先頭ゼロなしの月・日が欲しいときは、yyyy/M/dのように他の文字と組み合わせるか、%M・%dのように%を付けてください(実機でyyyy/M/d→2026/3/9を確認)。
【最重要】大文字小文字で意味が変わる
書式指定子は大文字と小文字で別物です。ここがPowerShellの日付で最も間違えやすいポイントです。
$dt = Get-Date "2026-03-09 14:05:07"
# 月と分: MM は月、mm は分
$dt.ToString("MM") # 03(月)
$dt.ToString("mm") # 05(分)
# 24時間と12時間: HH は24時間、hh は12時間
$dt.ToString("HH") # 14(24時間表記)
$dt.ToString("hh") # 02(12時間表記)
# よくある間違い: "HH:MM" は「時:月」になってしまう
$dt.ToString("HH:MM") # 14:03 ← 分のつもりが月!
$dt.ToString("HH:mm") # 14:05 ← 正しい
実機で確認したところ、MMは03(月)、mmは05(分)になりました。"HH:MM"と書くと「時:月」という意味になり、14:03のような一見それらしい値が出るため、間違いに気づきにくいのが厄介です。時刻は必ずHH:mm:ss(時・分・秒)と覚えてください。
よく使う書式パターン
実務で頻出する組み合わせをまとめます。コピーして使えます。
$dt = Get-Date "2026-03-09 14:05:07"
$dt.ToString("yyyy/MM/dd") # 2026/03/09(日付)
$dt.ToString("yyyy-MM-dd HH:mm:ss") # 2026-03-09 14:05:07(日時)
$dt.ToString("yyyyMMdd") # 20260309(ファイル名向け・日付)
$dt.ToString("yyyyMMdd_HHmmss") # 20260309_140507(ファイル名向け・日時)
$dt.ToString("yyyy年MM月dd日(ddd)") # 2026年03月09日(月)(和式)
$dt.ToString("o") # 2026-03-09T14:05:07.0000000(ISO 8601)
標準のISO 8601形式は"o"(ラウンドトリップ書式)で出せます。実機では2026-03-09T14:05:07.0000000になりました。他システムとの連携では、このISO形式がやり取りに向いています。
日付を加算・減算する
「7日後」「前日」「翌月」などの計算は、DateTimeのAdd系メソッドで行います。マイナスを渡せば過去方向になります。
$dt = Get-Date "2026-03-09"
$dt.AddDays(7) # 7日後
$dt.AddDays(-1) # 前日(昨日)
$dt.AddHours(3) # 3時間後
$dt.AddMonths(1) # 翌月
$dt.AddYears(-1) # 1年前
# 「昨日の日付」をファイル名向けに整形する例
(Get-Date).AddDays(-1).ToString("yyyyMMdd")
実機でも、2026-03-09に対してAddDays(1)が03/10、AddDays(-1)が03/08、AddMonths(1)が2026/04になりました。月末をまたぐ加算(1月31日 + 1か月など)も、AddMonthsが妥当な日付に丸めてくれます。
2つの日付の差を求める
2つの日付の差は、引き算で求められます。結果はTimeSpanになり、日数・時間・分などを取り出せます。
$start = Get-Date "2026-03-01" $end = Get-Date "2026-03-09" $diff = $end - $start # TimeSpan が返る $diff.Days # 8(差の日数) $diff.TotalHours # 192(合計時間) $diff.TotalDays # 8(合計日数・小数も含む) # New-TimeSpan でも同じことができる New-TimeSpan -Start $start -End $end
実機でも、2026-03-09から2026-03-01を引くとDaysが8、TotalHoursが192になりました。.Daysは「差のうちの日数部分」、.TotalDaysは「差を日数に換算した合計」で、時間を含む差では値が変わるため使い分けます。
ファイル名にタイムスタンプを付ける(コロン禁止)
バックアップやログでよく使うのが、ファイル名への日時付与です。ここで重要なのは、Windowsのファイル名にコロン:は使えないことです。時刻書式のHH:mm:ssをそのままファイル名に入れると失敗します。
# NG: コロンはファイル名に使えない $ngName = "backup_" + (Get-Date -Format "yyyy/MM/dd HH:mm:ss") + ".zip" # backup_2026/03/09 14:05:07.zip ← / も : も使えず失敗 # OK: 区切りを使わない書式にする $timestamp = Get-Date -Format "yyyyMMdd_HHmmss" $fileName = "backup_$timestamp.zip" # backup_20260309_140507.zip # 部分式 $() を使うと1行で書ける $path = "C:\backup\log_$(Get-Date -Format 'yyyyMMdd').txt"
ファイル名向けには、区切り文字を含まないyyyyMMdd_HHmmssが定番です。$()はサブ式(部分式)と呼ばれ、文字列の中で式を評価したいときに使います。中の書式指定にはシングルクォートを使うと、二重引用符との入れ子を避けられます。
曜日・月名は言語設定で変わる
dddd(曜日名)やMMMM(月名)は、実行環境の言語設定(カルチャー)によって表記が変わります。日本語環境では日本語、英語環境では英語になります。
$dt = Get-Date "2026-03-09"
# 日本語環境(ja-JP)での結果
$dt.ToString("dddd") # 月曜日
$dt.ToString("MMMM") # 3月
$dt.ToString("tt") # 午前/午後
# 言語を固定したい場合はカルチャーを指定する
$en = [System.Globalization.CultureInfo]::GetCultureInfo("en-US")
$dt.ToString("dddd", $en) # Monday
$dt.ToString("MMMM", $en) # March
実機でも、日本語環境(ja-JP)ではddddが月曜日、MMMMが3月になりました。環境に依存させたくない場合は、ToStringの第2引数にカルチャーを渡して英語などに固定できます。一方、yyyy・MM・ddのような数値の指定子は、言語設定に関係なく同じ数字になります。
よくある失敗
分のつもりでMMと書いて月になる
時刻はHH:mm:ssです。HH:MMと書くと「時:月」になり、14:03のような紛らわしい値が出ます。月はMM、分はmmと覚えてください。
ファイル名にコロンを含めて保存に失敗する
Windowsのファイル名に:や/は使えません。HH:mm:ssをそのまま使わず、yyyyMMdd_HHmmssのように区切りなしの書式にします。
-Formatの結果を日付として計算しようとする
Get-Date -Formatが返すのは文字列です。.AddDays()などの計算はできません。計算するなら整形前のDateTimeに対して行い、最後に整形します。
曜日・月名が想定と違う言語で出る
ddddやMMMMは言語設定に従います。固定したいならToStringにカルチャーを渡します。
よくある質問
MM、分は小文字のmmです。時刻はHH:mm:ss(24時間の時・分・秒)と覚えると間違えません。12時間表記が必要なときだけhhとtt(午前・午後)を使います。yyyyMMdd_HHmmssが定番です。:や/はファイル名に使えないため、区切り文字を含まない形にします。日付だけならyyyyMMddで十分です。(Get-Date).AddDays(-1)で昨日、(Get-Date).AddMonths(-1)で先月になります。マイナスの値を渡すと過去方向の日付になります。整形は計算のあとに.ToString("yyyyMMdd")などで行います。Get-Date -Format、変数に入れたDateTimeを整形するなら.ToString()が自然です。好みや文脈で使い分けてかまいません。$dt.ToString("dddd", [System.Globalization.CultureInfo]::GetCultureInfo("en-US"))のように、第2引数にカルチャーを渡すとMondayのように英語で出せます。日本語固定ならja-JPを指定します。まとめ
- 現在日時は
Get-Date、整形は-Formatか.ToString()で行います。 - 大文字小文字に注意:月
MM/分mm、24時間HH/12時間hhです。 - ファイル名には区切りのない
yyyyMMdd_HHmmssを使います(:は不可)。 - 加算・減算は
AddDaysなどのメソッド、差は引き算でTimeSpanが得られます。 -Formatの結果は文字列なので、計算は整形前のDateTimeで行います。dddd・MMMMは言語設定で変わるため、固定したいならカルチャーを指定します。
PowerShellの日付処理は、書式指定子の大文字小文字さえ押さえれば、あとは素直です。時刻はHH:mm:ss、ファイル名はyyyyMMdd_HHmmss、という2つの型を覚えておけば、ログやバックアップのスクリプトをすぐ書けるようになります。

