PowerShell で エポック時間 を理解し、扱うことは、JWT トークン、アサーション、システムログなどの場面で日時操作を行う際に不可欠です。このガイドでは、PowerShell を使ってエポック時間を操作し、人間が読める形式に変換する方法の例を紹介します。
エポック時間とは?
エポック時間は、 Unix 時間、 POSIX 時間、または Unix タイムスタンプとも呼ばれ、 1970 年 1 月 1 日(UTC/GMT の深夜 0 時)から経過した秒数であり、うるう秒は含まれません。プログラミングやシステムにおいて、時間の標準的な表現として広く使われています。
JWT トークンでは、エポック時間は、 iat (発行時刻)、 nbf (有効開始時刻)、 exp (有効期限)などのクレームによく使われます。以下は、JWT トークンにおけるエポック時間の例です。
{
"typ": "JWT",
"alg": "RS256",
"x5t": "3PaK4EfYBNQu3CtjYsa3YmhqQ5E0",
"kid": "3PaK4EfYBNQu3CtjYsa3YmhqQ5E0",
"aud": "00000003-0000-0000-c000-000000000000",
"iss": "https://sts.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/",
"iat": 1729784492,
"nbf": 1729784492,
"exp": 1729787119
}
PowerShell での日時操作
現在の日時を UTC で取得する
現在の日時を UTC で取得するには、次のようにします。
$utc = (Get-Date).ToUniversalTime()
ISO 8601 標準形式に変換する
UTC の日時を ISO 8601 形式に変換するには、次のようにします。
Get-Date ((Get-Date).ToUniversalTime()) -Format o
時間の加算と減算
PowerShell では、次のコマンドを使って現在の日時に時間を加算または減算できます。
時間を加算する
Get-Date ($utc).AddYears(1) -Format o
Get-Date ($utc).AddMonths(1) -Format o
Get-Date ($utc).AddDays(1) -Format o
Get-Date ($utc).AddHours(1) -Format o
Get-Date ($utc).AddMinutes(1) -Format o
Get-Date ($utc).AddSeconds(1) -Format o
時間を減算する
Get-Date ($utc).AddYears(-1) -Format o
Get-Date ($utc).AddMonths(-1) -Format o
Get-Date ($utc).AddDays(-1) -Format o
Get-Date ($utc).AddHours(-1) -Format o
Get-Date ($utc).AddMinutes(-1) -Format o
Get-Date ($utc).AddSeconds(-1) -Format o
エポック時間を読みやすい日時に変換する
エポック時間(例:JWT の exp クレーム)を人間が読める日時に変換するには、次のようにします。
$epoch = "1729838496"
(Get-Date -Date "1/1/1970").AddSeconds($epoch)
エポック時間を生成する
現在の日時からエポック時間を生成するには、次のようにします。
Get-Date $((Get-Date).ToUniversalTime()) -UFormat %s
12 時間先のエポック時間を生成するには、次のようにします。
Get-Date $((Get-Date).AddHours(12).ToUniversalTime()) -UFormat %s
便利なオンラインツール
すばやく変換できるツールが必要な場合は、次のものを使えます。
まとめ
PowerShell を使えば、JWT トークンのクレーム、アサーション、システムログなど、さまざまな用途でエポック時間を簡単に扱えます。上記のコマンドを活用することで、エポック時間を効率的に操作・変換し、スクリプトやアプリケーションで正確な時間処理を実現できます。