まくろぐ

PowerShell: 現在の日時を ISO 8601 (YYYY-MM-DD) フォーマットで取得する (Get-Date)

更新:
作成:

PowerShell の Get-Date コマンドレットを使用すると、現在の日時を表す文字列を取得することができます。

Format、UFormat パラメータで日時の書式を指定する

Format

Get-DateFormat パラメータを指定することで、任意の書式で日時文字列を取得することができます。

PS> Get-Date -Format "yyyy-MM-dd HH:mm:ss"
2020-03-19 15:23:09

PS> Get-Date -Format "yyyy-MM-ddTHH:mm:ssK"  # ISO 8601
2020-03-19T15:23:09+09:00

UFormat

UFormat パラメータを使うと、もう少しシンプルに記述できたりします(指定できる記号の一覧はこちら)。

PS> Get-Date -UFormat "%F %T"
2020-03-19 15:26:42

PS> Get-Date -UFormat "%Y-%m-%d %H:%M:%S"  # 同上
2020-03-19 15:26:42

PS> Get-Date -UFormat "%FT%T%Z"  # ISO 8601
2020-03-19T15:26:42+09

DateTime オブジェクトの ToString メソッドを使用する

Get-Date で先に DateTime オブジェクトを取得しておいて、ToString 関数で日時を表す文字列に変換するという方法もあります。

PS> (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
2020-03-19 15:11:37

この方法を使うと、DateTime オブジェクトで日時データを編集してから文字列に変換することができます。 例えば、次の例では、現在から 10 日後の日時を取得しています。

PS> (Get-Date).AddDays(10).ToString("yyyy-MM-dd HH:mm:ss")
2020-03-29 15:11:37

他にも次のような感じで日時の演算を行えます。

  • (Get-Date).AddYears(10): 10 年後
  • (Get-Date).AddYears(-5): 5 年前
  • (Get-Date).AddMonths(10): 10 ヵ月後
  • (Get-Date).AddMonths(-5): 5 ヵ月前
  • (Get-Date).AddDays(10): 10 日後
  • (Get-Date).AddDays(-5): 5 日前
  • (Get-Date).AddHours(10): 10 時間後
  • (Get-Date).AddHours(-5): 5 時間前
  • (Get-Date).AddMinutes(10): 10 分後
  • (Get-Date).AddMinutes(-5): 5 分後
  • (Get-Date).AddMinutes(10): 10 分後
  • (Get-Date).AddMinutes(-5): 5 分後

UTC 時刻で表示する

世界協定時 (UTC) で日時文字列を取得したい場合は、ToString の前に ToUniversalTime() を挟みます。

PS> (Get-Date).AddDays(10).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
2020-03-29T06:11:37Z

ローカルタイムではなく、UTC 時刻であることを明確にするために、末尾に Z を付けておきましょう(詳細は ISO 8601 で検索)。

関連記事

まくろぐ
サイトマップまくへのメッセージ