PowerShell

【PowerShell】Get-Dateで簡単に年月日を取得する方法

PowerShellではGet-Dateを使えば簡単に年月日を取得でき、Get-Date -Format "yyyy/MM/dd"のように指定すれば好みの形式で出力できます。

年、月、日それぞれはYearMonthDayプロパティで個別に利用でき、さまざまな日付処理に活用できる機能が整っています。

Get-Dateコマンドレットの基本機能

Get-Dateコマンドレットの役割と特徴

Get-Dateコマンドレットは、PowerShellで現在の日時情報を簡単に取得できる便利なコマンドです。

実行するとシステムの日付と時刻が返ってきますので、スクリプト内で動的なタイムスタンプが必要なときに特に役立ちます。

シンプルな構文で詳細な日付情報が扱えるため、さまざまなシナリオに活用できます。

出力結果の基本構造

Get-Dateを実行すると、日付や時刻に関する情報がプロパティとしてまとめられたオブジェクトが返ってくれます。

以下に、実際のコード例と出力例を示します。

$today = Get-Date
$today
Monday, April 16, 2025 11:45:30 AM

現在の日時情報の各要素

返ってくるオブジェクトは、複数のプロパティを含んでいます。

これらのプロパティには、YearMonthDayHourMinuteSecondなどがあり、現在の日時の各要素が格納されています。

たとえば、年だけを取得する場合は以下のように操作できます。

$currentYear = (Get-Date).Year
$currentYear
2025

年、月、日、時、分、秒の区別

それぞれのプロパティは、単体でも利用可能です。

年、月、日などの各要素に対して個別の計算や比較を行いたいときは、プロパティ参照が非常に便利です。

以下の例では、月と日のみを取得しています。

$currentMonth = (Get-Date).Month
$currentDay = (Get-Date).Day
"$currentMonth 月 $currentDay 日"
4 月 16 日

システムタイムゾーンの影響

Get-Dateの出力内容は、システムに設定されているタイムゾーンの影響を受けます。

OSや環境設定に応じたローカルタイムが反映されるため、特定のタイムゾーンを扱う必要がある場合は注意が必要です。

UTCの日時を取得する場合は、-AsUTCオプションを活用できます。

ローカルとUTCの違い

ローカルタイムとUTCは、特に国際的なアプリケーションや分散システムにおいて重要な違いが生じます。

たとえば、以下のコードではUTCでの日時も確認できます。

$utcNow = Get-Date -AsUTC
$utcNow
Monday, April 16, 2025 2:45:30 PM

これにより、システム時刻と世界標準時との違いが明確になります。

日付フォーマットのカスタマイズ方法

-Formatパラメータの使用ポイント

Get-Date-Formatパラメータを使用すると、表示形式を好みに合わせてカスタマイズできます。

たとえば、標準の「yyyy年M月d日 HH:mm:ss」形式とは異なる、使いやすい書式に変更することが可能です。

書式記号の概要

書式記号を指定することで、日付の各要素の表現方法を詳細に調整できます。

yyyyは4桁の年、MMは2桁の月、ddは2桁の日を表します。

これらは任意の組み合わせで使用でき、出力結果に直接反映されます。

主要な書式記号一覧

以下の表に、主要な書式記号を示します。

書式記号説明
yyyy年(4桁)
MM月(2桁)
dd日(2桁)
HH24時間制の時(2桁)
mm分(2桁)
ss秒(2桁)
ttAM/PM識別子

yyyy/MM/dd形式への変換例

-Format "yyyy/MM/dd"パラメータを利用すると、年、月、日の順で区切り文字に斜線を用いた書式に変換できます。

以下の例をご覧ください。

$formattedDate = Get-Date -Format "yyyy/MM/dd"
$formattedDate
2025/04/16

斜線区切り形式の注意点

斜線を区切り文字として使用する場合、環境やスクリプトの運用において、日付形式が混乱しないよう注意が必要です。

特に国際環境では、日付の表現や解釈が異なる場合があるため、統一されたフォーマットの使用が望まれます。

カスタムフォーマット設定の留意点

年、月、日の表示オプション

フォーマット設定では、年、月、日といった各項目の表示方法を柔軟に変更できます。

たとえば、dd-MM-yyyyMM/dd/yyyyなど、用途に合わせた形式に変更することで、データの整合性や可読性が向上します。

作業内容や対象システムに合わせた最適な表示形式を選択してください。

ゼロ埋めと非ゼロ埋めの比較

MMddの表記では、常に2桁で表示されるため、必要に応じてゼロ埋めが行われます。

一方で、Mdのように桁数を指定しない場合、1桁の場合はゼロが付加されません。

以下にサンプルコードを示します。

# ゼロ埋めあり:2桁表示

$formatWithZero = Get-Date -Format "yyyy/MM/dd"
$formatWithZero

# ゼロ埋めなし:1桁の場合にそのまま表示

$formatWithoutZero = Get-Date -Format "yyyy/M/d"
$formatWithoutZero
2025/04/16
2025/4/16

この違いを理解することで、用途に合わせた適切なフォーマット設定が可能になります。

プロパティによる個別の日付取得

Yearプロパティの利用方法

Yearプロパティを利用することで、取得した日時情報から年だけを簡単に取り出すことができます。

たとえば、年ごとの処理やログの出力に役立ちます。

年の数値取得とその応用

(Get-Date).Yearとすることで、年の数値が返却されます。

数値として扱えるため、演算処理や条件分岐での利用が容易です。

$currentYear = (Get-Date).Year
"今年は $currentYear 年です。"
今年は 2025 年です。

年の演算処理ケース

年の数値として取得した値は、加算や減算などの演算処理にも利用できます。

たとえば、翌年の処理を実施する際に、現在のYearプロパティに1を加えて利用することが考えられます。

$nextYear = (Get-Date).Year + 1
"来年は $nextYear 年になります。"
来年は 2026 年になります。

Monthプロパティの活用方法

Monthプロパティは、取得された日付情報から月の部分だけを取り出すことができます。

1月から12月の数値が返ってくるため、月ごとの処理に適しています。

月の数値と文字表示

月の値は数値として扱われますが、場合によっては月名に変換して表示することも可能です。

以下は数値をそのまま利用し、テキストと結合して表示する例です。

$currentMonth = (Get-Date).Month
"現在の月は $currentMonth 月です。"
現在の月は 4 月です。

1桁と2桁の出力違い

月をフォーマットする際に、MMMを使い分けることで桁数が変わります。

MMの場合、常に2桁で出力され、Mの場合は1桁の場合そのままとなります。

以下のコード例で違いを確認できます。

# ゼロ埋めありの2桁表示

$monthTwoDigits = Get-Date -Format "MM"
$monthTwoDigits

# ゼロ埋めなしの1桁表示

$monthOneDigit = Get-Date -Format "M"
$monthOneDigit
04
4

Dayプロパティの抽出方法

Dayプロパティを利用することで、日付の「日」の部分だけを抽出できます。

日付比較や特定日のフィルターとして利用可能です。

日単位の抽出例

具体的な利用例として、日単位の情報を他のログやデータと組み合わせて利用することが考えられます。

$currentDay = (Get-Date).Day
"今日は $currentDay 日です。"
今日は 16 日です。

日付比較における活用

日付の比較処理では、YearMonthDayのそれぞれの値を分解して利用することで、特定の日付かどうかを簡単に判定できます。

条件分岐の例は次のとおりです。

$today = Get-Date
if (($today.Day -eq 16) -and ($today.Month -eq 4)) {
    "今日は4月16日です。"
} else {
    "今日は4月16日ではありません。"
}
今日は4月16日です。

日付演算機能の応用

AddYearsメソッドによる計算

AddYearsメソッドを使うと、現在の日時に対して年数の加算・減算が簡単に行えます。

将来日や過去の日付を求める際に便利なメソッドです。

未来と過去の日付算出

未来または過去の日付を取得する例として、以下のコードを参照してください。

# 3年後の日付を取得

$futureDate = (Get-Date).AddYears(3)
"3年後の日時: $($futureDate.ToString('yyyy/MM/dd HH:mm:ss'))"

# 2年前の日付を取得

$pastDate = (Get-Date).AddYears(-2)
"2年前の日時: $($pastDate.ToString('yyyy/MM/dd HH:mm:ss'))"
3年後の日時: 2028/04/16 11:45:30
2年前の日時: 2023/04/16 11:45:30

複数年の加減算事例

複数年をまとめて加算する際も、連続してAddYearsメソッドを利用することで対応できます。

条件に合わせた柔軟な演算が可能です。

AddMonthsメソッドの応用

月単位の演算には、AddMonthsメソッドが便利です。

月の加算・減算により、月末の調整も自動で行ってくれる点が魅力です。

月単位の演算処理

月ごとの繰り上がりや繰り下がりも自動で処理してくれるため、翌月や前月への移動がスムーズに行えます。

# 2か月後の日付を取得

$nextTwoMonths = (Get-Date).AddMonths(2)
"2か月後の日時: $($nextTwoMonths.ToString('yyyy/MM/dd'))"
2か月後の日時: 2025/06/16

端数処理とカレンダー調整

月ごとの調整では、月末の日付が存在しない場合でも、PowerShellが自動的に調整を行ってくれます。

例えば、1月31日から1か月後は2月28日または29日となるケースがありますので、注意深く結果を確認してください。

AddDaysメソッドの利用シーン

日単位の加算・減算が必要な場合には、AddDaysメソッドを活用します。

特定の日数をプラスまたはマイナスする処理が簡単に実装できます。

日数計算とその具体例

次のサンプルコードでは、現在の日付から10日後の日時を取得する例を示します。

# 10日後の日付を取得

$nextTenDays = (Get-Date).AddDays(10)
"10日後の日時: $($nextTenDays.ToString('yyyy/MM/dd'))"
10日後の日時: 2025/04/26

土日や祝日の除外検討

AddDaysメソッドは単純に日数を加算するだけのため、土日や祝日を除外する場合は、あらかじめカレンダー情報を参照した上での判定処理が必要です。

たとえば、以下のようにループ処理で平日だけをカウントする方法が考えられます。

  • 開始日からループで1日ずつ確認する
  • 平日のみカウントする
  • 指定日数到達後の日時を採用する

このようにすることで、より実用的な日数計算が可能になります。

エラー対処と留意点

例外発生時の対策

スクリプト実行時に予期せぬエラーが発生する可能性があるため、正確な入力データの検証が重要です。

特に、ユーザー入力など外部データに依存する場合、エラー処理は慎重に行いましょう。

入力データの検証方法

入力値が適切な日付形式かどうかをチェックするために、try-catch構文などを利用するとよいです。

次のサンプルコードは、入力値を検証する一例です。

try {

    # ユーザー入力の日付をパース

    $userInput = "2025/04/16"
    $parsedDate = [datetime]::ParseExact($userInput, "yyyy/MM/dd", $null)
    "入力された日付は正しい形式です: $($parsedDate.ToString('yyyy/MM/dd'))"
} catch {
    "エラー:入力された日付の形式が正しくありません。"
}
入力された日付は正しい形式です: 2025/04/16

null値や不正フォーマットのチェック

null値や不正な日付フォーマットに対しては、事前に条件分岐でチェックを入れることが効果的です。

これにより、後続の処理で不要な例外が発生するのを防ぐことができます。

タイムゾーンとカルチャ差異の考慮

複数の地域やシステムでスクリプトを運用する場合、タイムゾーンやカルチャの違いに注意が必要です。

環境依存の動作について

システム環境ごとにGet-Dateの出力内容が若干異なる場合があります。

OSや地域設定に応じた動作の検証を推奨します。

特に、サーバー間での日付同期が求められるケースでは、環境差が影響する可能性があります。

ローカル設定とUTCの違い

ローカルタイムとUTCでは、表示される時刻に大きな差が発生するため、明確に運用する必要があります。

たとえば、データベースへの記録やログでUTCを使用する場合は、-AsUTCオプションを利用して統一性を保ちましょう。

カルチャ依存フォーマットの調整

カルチャ依存の設定により、日付や時刻の表記が異なることがあります。

[System.Globalization.CultureInfo]の利用や、Get-Date-Formatパラメータを活用することで、運用する地域に合わせたフォーマットが実現できます。

日本語と英語の表示差異

日本語環境と英語環境では、日時のフォーマットや曜日表記などに違いがあるため、国際化対応を進める場合は注意が必要です。

提示したフォーマット設定を各カルチャに合わせてカスタマイズすることで、一貫した表示を保つことができます。

まとめ

今回の記事では、Get-Dateコマンドレットの基本的な使い方から、フォーマットのカスタマイズ、そして個別プロパティの利用まで、具体的なサンプルコードとともに説明しました。

日付や時刻の演算機能やエラー対処に関するポイントも取り上げ、現場で実践的に活用できる内容としました。

これらの知識を活用して、PowerShellスクリプトでの日時操作をより効率的に行っていただければ幸いです。

関連記事

Back to top button