Понимание и работа со временем Epoch в PowerShell необходимы при выполнении операций с датой и временем в таких сценариях, как токены JWT, утверждения или системные журналы. В этом руководстве приведены примеры того, как работать со временем Epoch и преобразовывать его в удобочитаемые форматы с помощью PowerShell.
Что такое время Epoch?
Время Epoch, также известное как время Unix, время POSIX или метка времени Unix, — это количество секунд, прошедших с 1 января 1970 года (полночь UTC/GMT), без учёта високосных секунд. Оно широко используется в программировании и системах как стандартное представление времени.
В токенах JWT время Epoch обычно используется для таких утверждений (claims), как iat (время выдачи), nbf (не раньше чем) и exp (срок действия). Ниже приведён пример времени Epoch в токене 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
Преобразование времени Epoch в удобочитаемую дату
Чтобы преобразовать время Epoch (например, утверждение exp в JWT) в удобочитаемую дату:
$epoch = "1729838496"
(Get-Date -Date "1/1/1970").AddSeconds($epoch)
Генерация времени Epoch
Чтобы сгенерировать время Epoch из текущей даты:
Get-Date $((Get-Date).ToUniversalTime()) -UFormat %s
Чтобы сгенерировать время Epoch на 12 часов вперёд:
Get-Date $((Get-Date).AddHours(12).ToUniversalTime()) -UFormat %s
Полезные онлайн-инструменты
Если вам нужен инструмент для быстрого преобразования, вы можете использовать:
Заключение
PowerShell упрощает работу со временем Epoch для различных сценариев, включая утверждения токенов JWT, утверждения и системные журналы. Используя приведённые выше команды, вы можете эффективно работать со временем Epoch и преобразовывать его, обеспечивая точную обработку времени в своих сценариях и приложениях.