Compreender e trabalhar com o tempo Epoch no PowerShell é essencial ao lidar com operações de data e hora em cenários como tokens JWT, asserções ou registos do sistema. Este guia apresenta exemplos de como manipular o tempo Epoch e convertê-lo em formatos legíveis por humanos com o PowerShell.
O que é o tempo Epoch?
O tempo Epoch, também conhecido como tempo Unix, tempo POSIX ou timestamp Unix, é o número de segundos decorridos desde 1 de janeiro de 1970 (meia-noite UTC/GMT), excluindo os segundos intercalares. É amplamente usado em programação e em sistemas como representação padrão do tempo.
Em tokens JWT, o tempo Epoch é usado habitualmente para claims como iat (emitido em), nbf (não antes de) e exp (expiração). Segue-se um exemplo de tempo Epoch num token 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
}
Trabalhar com datas e horas no PowerShell
Obter a data e hora atuais em UTC
Para obter a data e hora atuais em UTC:
$utc = (Get-Date).ToUniversalTime()
Converter para o formato padrão ISO 8601
Para converter a data UTC para o formato ISO 8601:
Get-Date ((Get-Date).ToUniversalTime()) -Format o
Adicionar e subtrair tempo
Podes adicionar ou subtrair tempo à data atual no PowerShell com os seguintes comandos:
Adicionar tempo
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
Subtrair tempo
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
Converter o tempo Epoch numa data legível
Para converter o tempo Epoch (por exemplo, o claim exp em JWT) numa data legível por humanos:
$epoch = "1729838496"
(Get-Date -Date "1/1/1970").AddSeconds($epoch)
Gerar tempo Epoch
Para gerar o tempo Epoch a partir da data atual:
Get-Date $((Get-Date).ToUniversalTime()) -UFormat %s
Para gerar o tempo Epoch com 12 horas de antecedência:
Get-Date $((Get-Date).AddHours(12).ToUniversalTime()) -UFormat %s
Ferramentas úteis online
Se precisares de uma ferramenta de conversão rápida, podes usar:
Conclusão
O PowerShell facilita o trabalho com o tempo Epoch em vários casos de uso, incluindo claims de tokens JWT, asserções e registos do sistema. Com os comandos acima, podes manipular e converter o tempo Epoch de forma eficiente, garantindo um tratamento preciso do tempo nos teus scripts e aplicações.